public void TestCombineSearch()
        {
            // create mock of MovieRepository and construct SearchHelper with it
              Mock<MovieRepository> repository = new Mock<MovieRepository>();
              repository.Setup(x => x.Select<MovieModel>()).Returns(movies.AsQueryable());
              SearchHelper searcher = new SearchHelper(repository.Object);

              // test cases

              //1
              SearchModel search1 = new SearchModel
              {
            MovieName = new SearchOption<string>(),
            Genre = new SearchOption<Genre>(),
            ActorLastName = new SearchOption<string>(),
              };
              List<MovieModel> result1 = searcher.Search(search1);
              Assert.IsTrue(result1.Count == 3);
              Assert.IsTrue(result1.Where(x => x.Name == movies[0].Name).Any());
              Assert.IsTrue(result1.Where(x => x.Name == movies[1].Name).Any());
              Assert.IsTrue(result1.Where(x => x.Name == movies[2].Name).Any());

              //2
              SearchModel search2 = new SearchModel
              {
            MovieName = new SearchOption<string>(),
            Genre = new SearchOption<Genre> { Value = Genre.Drammatic, IsCritical = true },
            ActorLastName = new SearchOption<string> { Value = "Стоун", IsCritical = true },
              };
              List<MovieModel> result2 = searcher.Search(search2);
              Assert.IsTrue(result2.Count == 1);
              Assert.IsTrue(result2.Where(x => x.Name == movies[1].Name).Any());
        }
        public static IEnumerable<AssistiveToolsReviewPageItem> GetSearchResultsByCategory(int page, Guid categoryId, Guid? issueId = null, Guid? gradeRangeId = null, Guid? technologyId = null,
            Guid? platformId = null, string searchTerm = null, SearchHelper.SortOptions.AssistiveToolsSortOptions sortOption = 0)
        {
            int? minGrade = null;
            int? maxGrade = null;

            if (gradeRangeId.HasValue)
            {
                GetMinMaxGrade(gradeRangeId.Value, out minGrade, out maxGrade);
            }

            return SearchHelper.GetAssitiveToolsReviewPagesByCategory(page, categoryId, issueId, minGrade, maxGrade, technologyId, platformId, searchTerm, sortOption);
        }
        public static List<AssistiveToolSearchResultSet> GetGroupedSearchResults(int page, Guid? issueId = null, Guid? gradeRangeId = null, Guid? technologyId = null, 
            Guid? platformId = null, string searchTerm = null, SearchHelper.SortOptions.AssistiveToolsSortOptions sortOption = 0)
        {
            int? minGrade = null;
            int? maxGrade = null;

            if (gradeRangeId.HasValue)
            {
                GetMinMaxGrade(gradeRangeId.Value, out minGrade, out maxGrade);
            }

            return SearchHelper.GetAssitiveToolsReviewPages(page, issueId, minGrade, maxGrade, technologyId, platformId, searchTerm, sortOption);
        }
        public IEnumerable<EventWithMarketEntity> Search(string searchText)
        {
            var searchHelper = new SearchHelper<EventWithMarketEntity>(searchText);
            searchHelper.RegisterHintFilter(GetSearchFilters().ToArray());

            var filters = searchHelper.GetValidFilters();
            var toIncludePathList = searchHelper.GetToIncludePathInQuery();

            var query = toIncludePathList.Aggregate(_context.Set<EventWithMarketEntity>().AsQueryable(),
                (current, include) => current.Include(include)).AsEnumerable();

            query = filters.Aggregate(query, (current, filter) => current.Where(filter));

            return query.ToList();
        }
        public IEnumerable<BetCombinationEntity> SearchBets(string searchText)
        {
            var searchHelper = new SearchHelper<BetCombinationEntity>(searchText);
            searchHelper.RegisterHintFilter(GetSearchFilters().ToArray());

            var filters = searchHelper.GetValidFilters();
            var toIncludePathList = searchHelper.GetToIncludePathInQuery();

            // Always include retrieve coupon data in query
            var query = toIncludePathList.Aggregate(_context.Set<BetCombinationEntity>().AsQueryable(),
                (current, include) => current.Include(include)).Include(e => e.Coupon).AsEnumerable();

            query = filters.Aggregate(query, (current, filter) => current.Where(filter));

            return query.ToList();
        }
Example #6
0
        public ActionResult Search_2(SearchModel model)
        {
            plantadbEntities db = new plantadbEntities();
            var searchHelper = new SearchHelper();
            bool fich_search = true;

            List<categoria> categorias = new List<categoria>();
            categorias.AddRange(db.categoria.ToList());

            List<int> ids = new List<int>();

            string[] words = model.Categorias_String.Split(',');
            foreach (string word in words) 
            {
                int temp = searchHelper.getCategoriaIdfromName(categorias, word);
                if (temp > 0) 
                {
                    ids.Add(temp);
                    fich_search = false;
                }

            }  

            if(fich_search)
            {
                List<ficha> fichas = new List<ficha>();
                fichas.AddRange(db.ficha.ToList());

                foreach (string word in words)
                {
                    int temp = searchHelper.getFichaIdfromName(fichas,word);
                    if (temp > 0)
                    {
                        ids.Add(temp);
                    }

                }
            }

            return Results(ids,fich_search);
        }
Example #7
0
 public static List<SearchHelper> searchResuls(string query)
 {
     using (SqlConnection con = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString))
     {
         con.Open();
         query = query.ToLower();
         SqlCommand cmd = new SqlCommand(@"SELECT [Id], [titlu], [continut], [image], [cat_id], [publishDate], [autor] FROM Stiri
                                              WHERE titlu LIKE '%" + query + "%' OR continut LIKE '%" + query + "%' ORDER BY [publishDate] DESC", con);
         using (SqlDataReader reader = cmd.ExecuteReader())
         {
             List<SearchHelper> results = new List<SearchHelper>();
             while (reader.Read())
             {
                 SearchHelper curent = new SearchHelper
                 {
                     Id = reader.GetInt32(0),
                     titlu = reader.GetString(1),
                     continut = reader.GetString(2),
                     image = reader.GetString(3),
                     cat_id = reader.GetInt32(4),
                     publishDate = reader.GetDateTime(5).ToString(),
                     autor = reader.GetString(6)
                 };
                 if (canAdd(results, curent))
                 {
                     curent.category = Categorii.cat_by_id(curent.cat_id);
                     if (curent.continut.Length > 50)
                     {
                         curent.continut = curent.continut.Substring(0, 50) + "...";
                     }
                     results.Add(curent);
                 }
             }
             return results ;
         }
     }
 }
 public MovieController()
 {
     searchHelper = new SearchHelper();
 }
Example #9
0
    public void GetResult(Action <List <T> > onResult)
    {
        if (searchStringChanged)
        {
            searchResult  = string.IsNullOrEmpty(currentSearchString) ? originalList : SearchHelper.Search(currentSearchString, originalList);
            currentResult = searchResult;
        }

        if (searchFilterChanged || searchStringChanged)
        {
            currentResult = currentFilterPredicate != null
                ? SearchHelper.Filter(searchResult, currentFilterPredicate)
                : searchResult;
        }

        if ((searchSortChanged || searchStringChanged) && currentResult != null)
        {
            SearchHelper.Sort(currentSortingType, currentResult, isDescendingSortOrder);
        }

        searchStringChanged = false;
        searchFilterChanged = false;
        searchSortChanged   = false;

        onResult?.Invoke(currentResult);
    }
Example #10
0
 public override string ResolveValue(Item item)
 {
     Assert.ArgumentNotNull(item, "item");
     return(SearchHelper.FormatNumber(item.Axes.Level));
 }
        private void SetupChildControls()
        {
            foreach (StudyStatusEnum s in  StudyStatusEnum.GetAll())
            {
                StatusListBox.Items.Add(new ListItem {
                    Text = ServerEnumDescription.GetLocalizedDescription(s), Value = s.Lookup
                });
            }

            ClearToStudyDateButton.Attributes["onclick"]   = ScriptHelper.ClearDate(ToStudyDate.ClientID, ToStudyDateCalendarExtender.ClientID);
            ClearFromStudyDateButton.Attributes["onclick"] = ScriptHelper.ClearDate(FromStudyDate.ClientID, FromStudyDateCalendarExtender.ClientID);
            ToStudyDate.Attributes["OnChange"]             = ScriptHelper.CheckDateRange(FromStudyDate.ClientID, ToStudyDate.ClientID, ToStudyDate.ClientID, ToStudyDateCalendarExtender.ClientID, "To Date must be greater than From Date");
            FromStudyDate.Attributes["OnChange"]           = ScriptHelper.CheckDateRange(FromStudyDate.ClientID, ToStudyDate.ClientID, FromStudyDate.ClientID, FromStudyDateCalendarExtender.ClientID, "From Date must be less than To Date");

            GridPagerTop.InitializeGridPager(SR.GridPagerStudySingleItem, SR.GridPagerStudyMultipleItems, StudyListGridView.TheGrid,
                                             () => StudyListGridView.ResultCount, ImageServerConstants.GridViewPagerPosition.Top);
            StudyListGridView.Pager = GridPagerTop;

            ConfirmStudySearchMessageBox.Confirmed += delegate
            {
                StudyListGridView.DataBindOnPreRender =
                    true;
                StudyListGridView.Refresh();
                if (SearchUpdatePanel.UpdateMode ==
                    UpdatePanelUpdateMode.Conditional)
                {
                    SearchUpdatePanel.Update();
                }
            };
            ConfirmStudySearchMessageBox.Cancel += delegate
            {
                StudyListGridView.DataBindOnPreRender = false;
            };

            RestoreMessageBox.Confirmed += delegate(object data)
            {
                if (data is IList <Study> )
                {
                    var studies = data as IList <Study>;
                    foreach (Study study in studies)
                    {
                        _controller.RestoreStudy(study);
                    }
                }
                else if (data is IList <StudySummary> )
                {
                    var studies = data as IList <StudySummary>;
                    foreach (StudySummary study in studies)
                    {
                        _controller.RestoreStudy(study.TheStudy);
                    }
                }
                else if (data is Study)
                {
                    var study = data as Study;
                    _controller.RestoreStudy(study);
                }

                DataBind();
                SearchUpdatePanel.Update();                 // force refresh
            };

            StudyListGridView.DataSourceCreated += delegate(StudyDataSource source)
            {
                source.Partition   = ServerPartition;
                source.DateFormats = ToStudyDateCalendarExtender.Format;

                if (!String.IsNullOrEmpty(PatientId.TrimText))
                {
                    source.PatientId = SearchHelper.TrailingWildCard(PatientId.TrimText);
                }
                if (!String.IsNullOrEmpty(PatientName.TrimText))
                {
                    source.PatientName = SearchHelper.NameWildCard(PatientName.TrimText);
                }
                if (!String.IsNullOrEmpty(AccessionNumber.TrimText))
                {
                    source.AccessionNumber = SearchHelper.TrailingWildCard(AccessionNumber.TrimText);
                }
                if (!String.IsNullOrEmpty(ToStudyDate.Text))
                {
                    source.ToStudyDate = ToStudyDate.Text;
                }
                if (!String.IsNullOrEmpty(FromStudyDate.Text))
                {
                    source.FromStudyDate = FromStudyDate.Text;
                }
                if (!String.IsNullOrEmpty(StudyDescription.TrimText))
                {
                    source.StudyDescription = SearchHelper.LeadingAndTrailingWildCard(StudyDescription.TrimText);
                }
                if (!String.IsNullOrEmpty(ReferringPhysiciansName.TrimText))
                {
                    source.ReferringPhysiciansName = SearchHelper.NameWildCard(ReferringPhysiciansName.TrimText);
                }
                if (!String.IsNullOrEmpty(ResponsiblePerson.TrimText))
                {
                    source.ResponsiblePerson = SearchHelper.NameWildCard(ResponsiblePerson.TrimText);
                }
                if (!String.IsNullOrEmpty(ResponsibleOrganization.TrimText))
                {
                    source.ResponsibleOrganization = SearchHelper.NameWildCard(ResponsibleOrganization.TrimText);
                }

                if (ModalityListBox.SelectedIndex > -1)
                {
                    var modalities = new List <string>();
                    foreach (ListItem item in ModalityListBox.Items)
                    {
                        if (item.Selected)
                        {
                            modalities.Add(item.Value);
                        }
                    }
                    source.Modalities = modalities.ToArray();
                }

                if (StatusListBox.SelectedIndex > -1)
                {
                    var statuses = new List <string>();
                    foreach (ListItem status in StatusListBox.Items)
                    {
                        if (status.Selected)
                        {
                            statuses.Add(status.Value);
                        }
                    }
                    source.Statuses = statuses.ToArray();
                }
            };

            //Set Roles
            ViewImagesButton.Roles            = AuthorityTokens.Study.ViewImages;
            ViewStudyDetailsButton.Roles      = AuthorityTokens.Study.View;
            MoveStudyButton.Roles             = AuthorityTokens.Study.Move;
            DeleteStudyButton.Roles           = AuthorityTokens.Study.Delete;
            RestoreStudyButton.Roles          = AuthorityTokens.Study.Restore;
            AssignAuthorityGroupsButton.Roles = ClearCanvas.ImageServer.Common.Authentication.AuthorityTokens.Study.EditDataAccess;
        }
Example #12
0
        public override void Install(ModuleManager manager)
        {
            manager.CreateCommands("", cgb => {
                cgb.AddCheck(PermissionChecker.Instance);

                var client = manager.Client;

                commands.ForEach(cmd => cmd.Init(cgb));

                cgb.CreateCommand(Prefix + "sr").Alias(Prefix + "setrole")
                .Description("Sets a role for a given user.\n**Usage**: .sr @User Guest")
                .Parameter("user_name", ParameterType.Required)
                .Parameter("role_name", ParameterType.Unparsed)
                .AddCheck(SimpleCheckers.CanManageRoles)
                .Do(async e => {
                    var userName = e.GetArg("user_name");
                    var roleName = e.GetArg("role_name");

                    if (string.IsNullOrWhiteSpace(roleName))
                    {
                        return;
                    }

                    if (!e.User.ServerPermissions.ManageRoles)
                    {
                        await e.Channel.SendMessage("You have insufficient permissions.");
                    }

                    var usr = e.Server.FindUsers(userName).FirstOrDefault();
                    if (usr == null)
                    {
                        await e.Channel.SendMessage("You failed to supply a valid username");
                        return;
                    }

                    var role = e.Server.FindRoles(roleName).FirstOrDefault();
                    if (role == null)
                    {
                        await e.Channel.SendMessage("You failed to supply a valid role");
                        return;
                    }

                    try {
                        await usr.AddRoles(role);
                        await e.Channel.SendMessage($"Successfully added role **{role.Name}** to user **{usr.Name}**");
                    } catch (Exception ex) {
                        await e.Channel.SendMessage("Failed to add roles. Bot has insufficient permissions.\n");
                        Console.WriteLine(ex.ToString());
                    }
                });

                cgb.CreateCommand(Prefix + "rr").Alias(Prefix + "removerole")
                .Description("Removes a role from a given user.\n**Usage**: .rr @User Admin")
                .Parameter("user_name", ParameterType.Required)
                .Parameter("role_name", ParameterType.Unparsed)
                .AddCheck(SimpleCheckers.CanManageRoles)
                .Do(async e => {
                    var userName = e.GetArg("user_name");
                    var roleName = e.GetArg("role_name");

                    if (string.IsNullOrWhiteSpace(roleName))
                    {
                        return;
                    }

                    var usr = e.Server.FindUsers(userName).FirstOrDefault();
                    if (usr == null)
                    {
                        await e.Channel.SendMessage("You failed to supply a valid username");
                        return;
                    }

                    var role = e.Server.FindRoles(roleName).FirstOrDefault();
                    if (role == null)
                    {
                        await e.Channel.SendMessage("You failed to supply a valid role");
                        return;
                    }

                    try {
                        await usr.RemoveRoles(role);
                        await e.Channel.SendMessage($"Successfully removed role **{role.Name}** from user **{usr.Name}**");
                    } catch {
                        await e.Channel.SendMessage("Failed to remove roles. Most likely reason: Insufficient permissions.");
                    }
                });

                cgb.CreateCommand(Prefix + "r").Alias(Prefix + "role").Alias(Prefix + "cr")
                .Description("Creates a role with a given name.**Usage**: .r Awesome Role")
                .Parameter("role_name", ParameterType.Unparsed)
                .AddCheck(SimpleCheckers.CanManageRoles)
                .Do(async e => {
                    if (string.IsNullOrWhiteSpace(e.GetArg("role_name")))
                    {
                        return;
                    }
                    try {
                        var r = await e.Server.CreateRole(e.GetArg("role_name"));
                        await e.Channel.SendMessage($"Successfully created role **{r.Name}**.");
                    } catch (Exception) {
                        await e.Channel.SendMessage(":warning: Unspecified error.");
                    }
                });

                cgb.CreateCommand(Prefix + "rolecolor").Alias(Prefix + "rc")
                .Parameter("role_name", ParameterType.Required)
                .Parameter("r", ParameterType.Optional)
                .Parameter("g", ParameterType.Optional)
                .Parameter("b", ParameterType.Optional)
                .Description("Set a role's color to the hex or 0-255 rgb color value provided.\n**Usage**: .color Admin 255 200 100 or .color Admin ffba55")
                .Do(async e => {
                    if (!e.User.ServerPermissions.ManageRoles)
                    {
                        await e.Channel.SendMessage("You don't have permission to use this!");
                        return;
                    }

                    var args = e.Args.Where(s => s != string.Empty);

                    if (args.Count() != 2 && args.Count() != 4)
                    {
                        await e.Channel.SendMessage("The parameters are invalid.");
                        return;
                    }

                    var role = e.Server.FindRoles(e.Args[0]).FirstOrDefault();

                    if (role == null)
                    {
                        await e.Channel.SendMessage("That role does not exist.");
                        return;
                    }
                    try {
                        var rgb = args.Count() == 4;

                        var red   = Convert.ToByte(rgb ? int.Parse(e.Args[1]) : Convert.ToInt32(e.Args[1].Substring(0, 2), 16));
                        var green = Convert.ToByte(rgb ? int.Parse(e.Args[2]) : Convert.ToInt32(e.Args[1].Substring(2, 2), 16));
                        var blue  = Convert.ToByte(rgb ? int.Parse(e.Args[3]) : Convert.ToInt32(e.Args[1].Substring(4, 2), 16));

                        await role.Edit(color: new Color(red, green, blue));
                        await e.Channel.SendMessage($"Role {role.Name}'s color has been changed.");
                    } catch (Exception ex) {
                        await e.Channel.SendMessage("Error occured, most likely invalid parameters or insufficient permissions.");
                    }
                });

                cgb.CreateCommand(Prefix + "roles")
                .Description("List all roles on this server or a single user if specified.")
                .Parameter("user", ParameterType.Unparsed)
                .Do(async e => {
                    if (!string.IsNullOrWhiteSpace(e.GetArg("user")))
                    {
                        var usr = e.Server.FindUsers(e.GetArg("user")).FirstOrDefault();
                        if (usr == null)
                        {
                            return;
                        }

                        await e.Channel.SendMessage($"`List of roles for **{usr.Name}**:` \n• " + string.Join("\n• ", usr.Roles));
                        return;
                    }
                    await e.Channel.SendMessage("`List of roles:` \n• " + string.Join("\n• ", e.Server.Roles));
                });

                cgb.CreateCommand(Prefix + "b").Alias(Prefix + "ban")
                .Parameter("user", ParameterType.Required)
                .Parameter("msg", ParameterType.Optional)
                .Description("Bans a user by id or name with an optional message.\n**Usage**: .b \"@some Guy\" Your behaviour is toxic.")
                .Do(async e => {
                    var msg  = e.GetArg("msg");
                    var user = e.GetArg("user");
                    if (e.User.ServerPermissions.BanMembers)
                    {
                        var usr = e.Server.FindUsers(user).FirstOrDefault();
                        if (usr == null)
                        {
                            await e.Channel.SendMessage("User not found.");
                            return;
                        }
                        if (!string.IsNullOrWhiteSpace(msg))
                        {
                            await usr.SendMessage($"**You have been BANNED from `{e.Server.Name}` server.**\n" +
                                                  $"Reason: {msg}");
                            await Task.Delay(2000);         // temp solution; give time for a message to be send, fu volt
                        }
                        try {
                            await e.Server.Ban(usr);
                            await e.Channel.SendMessage("Banned user " + usr.Name + " Id: " + usr.Id);
                        } catch {
                            await e.Channel.SendMessage("Error. Most likely I don't have sufficient permissions.");
                        }
                    }
                });

                cgb.CreateCommand(Prefix + "k").Alias(Prefix + "kick")
                .Parameter("user")
                .Parameter("msg", ParameterType.Unparsed)
                .Description("Kicks a mentioned user.")
                .Do(async e => {
                    var msg  = e.GetArg("msg");
                    var user = e.GetArg("user");
                    if (e.User.ServerPermissions.KickMembers)
                    {
                        var usr = e.Server.FindUsers(user).FirstOrDefault();
                        if (usr == null)
                        {
                            await e.Channel.SendMessage("User not found.");
                            return;
                        }
                        if (!string.IsNullOrWhiteSpace(msg))
                        {
                            await usr.SendMessage($"**You have been KICKED from `{e.Server.Name}` server.**\n" +
                                                  $"Reason: {msg}");
                            await Task.Delay(2000);     // temp solution; give time for a message to be send, fu volt
                        }
                        try {
                            await usr.Kick();
                            await e.Channel.SendMessage("Kicked user " + usr.Name + " Id: " + usr.Id);
                        } catch {
                            await e.Channel.SendMessage("Error. Most likely I don't have sufficient permissions.");
                        }
                    }
                });
                cgb.CreateCommand(Prefix + "mute")
                .Description("Mutes mentioned user or users.")
                .Parameter("throwaway", ParameterType.Unparsed)
                .Do(async e => {
                    if (!e.User.ServerPermissions.MuteMembers)
                    {
                        await e.Channel.SendMessage("You do not have permission to do that.");
                        return;
                    }
                    if (!e.Message.MentionedUsers.Any())
                    {
                        return;
                    }
                    try {
                        foreach (var u in e.Message.MentionedUsers)
                        {
                            await u.Edit(isMuted: true);
                        }
                        await e.Channel.SendMessage("Mute successful");
                    } catch {
                        await e.Channel.SendMessage("I do not have permission to do that most likely.");
                    }
                });

                cgb.CreateCommand(Prefix + "unmute")
                .Description("Unmutes mentioned user or users.")
                .Parameter("throwaway", ParameterType.Unparsed)
                .Do(async e => {
                    if (!e.User.ServerPermissions.MuteMembers)
                    {
                        await e.Channel.SendMessage("You do not have permission to do that.");
                        return;
                    }
                    if (!e.Message.MentionedUsers.Any())
                    {
                        return;
                    }
                    try {
                        foreach (var u in e.Message.MentionedUsers)
                        {
                            await u.Edit(isMuted: false);
                        }
                        await e.Channel.SendMessage("Unmute successful");
                    } catch {
                        await e.Channel.SendMessage("I do not have permission to do that most likely.");
                    }
                });

                cgb.CreateCommand(Prefix + "deafen")
                .Alias(Prefix + "deaf")
                .Description("Deafens mentioned user or users")
                .Parameter("throwaway", ParameterType.Unparsed)
                .Do(async e => {
                    if (!e.User.ServerPermissions.DeafenMembers)
                    {
                        await e.Channel.SendMessage("You do not have permission to do that.");
                        return;
                    }
                    if (!e.Message.MentionedUsers.Any())
                    {
                        return;
                    }
                    try {
                        foreach (var u in e.Message.MentionedUsers)
                        {
                            await u.Edit(isDeafened: true);
                        }
                        await e.Channel.SendMessage("Deafen successful");
                    } catch {
                        await e.Channel.SendMessage("I do not have permission to do that most likely.");
                    }
                });

                cgb.CreateCommand(Prefix + "undeafen")
                .Alias(Prefix + "undeaf")
                .Description("Undeafens mentioned user or users")
                .Parameter("throwaway", ParameterType.Unparsed)
                .Do(async e => {
                    if (!e.User.ServerPermissions.DeafenMembers)
                    {
                        await e.Channel.SendMessage("You do not have permission to do that.");
                        return;
                    }
                    if (!e.Message.MentionedUsers.Any())
                    {
                        return;
                    }
                    try {
                        foreach (var u in e.Message.MentionedUsers)
                        {
                            await u.Edit(isDeafened: false);
                        }
                        await e.Channel.SendMessage("Undeafen successful");
                    } catch {
                        await e.Channel.SendMessage("I do not have permission to do that most likely.");
                    }
                });

                cgb.CreateCommand(Prefix + "rvch")
                .Description("Removes a voice channel with a given name.")
                .Parameter("channel_name", ParameterType.Required)
                .Do(async e => {
                    try {
                        if (e.User.ServerPermissions.ManageChannels)
                        {
                            await e.Server.FindChannels(e.GetArg("channel_name"), ChannelType.Voice).FirstOrDefault()?.Delete();
                            await e.Channel.SendMessage($"Removed channel **{e.GetArg("channel_name")}**.");
                        }
                    } catch {
                        await e.Channel.SendMessage("Insufficient permissions.");
                    }
                });

                cgb.CreateCommand(Prefix + "vch").Alias(Prefix + "cvch")
                .Description("Creates a new voice channel with a given name.")
                .Parameter("channel_name", ParameterType.Required)
                .Do(async e => {
                    try {
                        if (e.User.ServerPermissions.ManageChannels)
                        {
                            await e.Server.CreateChannel(e.GetArg("channel_name"), ChannelType.Voice);
                            await e.Channel.SendMessage($"Created voice channel **{e.GetArg("channel_name")}**.");
                        }
                    } catch {
                        await e.Channel.SendMessage("Insufficient permissions.");
                    }
                });

                cgb.CreateCommand(Prefix + "rch").Alias(Prefix + "rtch")
                .Description("Removes a text channel with a given name.")
                .Parameter("channel_name", ParameterType.Required)
                .Do(async e => {
                    try {
                        if (e.User.ServerPermissions.ManageChannels)
                        {
                            var channel = e.Server.FindChannels(e.GetArg("channel_name"), ChannelType.Text).FirstOrDefault();
                            if (channel == null)
                            {
                                return;
                            }
                            await channel.Delete();
                            await e.Channel.SendMessage($"Removed text channel **{e.GetArg("channel_name")}**.");
                        }
                    } catch {
                        await e.Channel.SendMessage("Insufficient permissions.");
                    }
                });

                cgb.CreateCommand(Prefix + "ch").Alias(Prefix + "tch")
                .Description("Creates a new text channel with a given name.")
                .Parameter("channel_name", ParameterType.Required)
                .Do(async e => {
                    try {
                        if (e.User.ServerPermissions.ManageChannels)
                        {
                            await e.Server.CreateChannel(e.GetArg("channel_name"), ChannelType.Text);
                            await e.Channel.SendMessage($"Added text channel **{e.GetArg("channel_name")}**.");
                        }
                    } catch {
                        await e.Channel.SendMessage("Insufficient permissions.");
                    }
                });

                cgb.CreateCommand(Prefix + "st").Alias(Prefix + "settopic")
                .Description("Sets a topic on the current channel.")
                .Parameter("topic", ParameterType.Unparsed)
                .Do(async e => {
                    try {
                        if (e.User.ServerPermissions.ManageChannels)
                        {
                            await e.Channel.Edit(topic: e.GetArg("topic"));
                        }
                    } catch { }
                });

                cgb.CreateCommand(Prefix + "uid").Alias(Prefix + "userid")
                .Description("Shows user ID.")
                .Parameter("user", ParameterType.Unparsed)
                .Do(async e => {
                    var usr = e.User;
                    if (!string.IsNullOrWhiteSpace(e.GetArg("user")))
                    {
                        usr = e.Channel.FindUsers(e.GetArg("user")).FirstOrDefault();
                    }
                    if (usr == null)
                    {
                        return;
                    }
                    await e.Channel.SendMessage($"Id of the user { usr.Name } is { usr.Id }");
                });

                cgb.CreateCommand(Prefix + "cid").Alias(Prefix + "channelid")
                .Description("Shows current channel ID.")
                .Do(async e => await e.Channel.SendMessage("This channel's ID is " + e.Channel.Id));

                cgb.CreateCommand(Prefix + "sid").Alias(Prefix + "serverid")
                .Description("Shows current server ID.")
                .Do(async e => await e.Channel.SendMessage("This server's ID is " + e.Server.Id));

                cgb.CreateCommand(Prefix + "stats")
                .Description("Shows some basic stats for Nadeko.")
                .Do(async e => {
                    await e.Channel.SendMessage(await NadekoStats.Instance.GetStats());
                });

                cgb.CreateCommand(Prefix + "dysyd")
                .Description("Shows some basic stats for Nadeko.")
                .Do(async e => {
                    await e.Channel.SendMessage((await NadekoStats.Instance.GetStats()).Matrix().TrimTo(1990));
                });

                cgb.CreateCommand(Prefix + "heap")
                .Description("Shows allocated memory - OWNER ONLY")
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(async e => {
                    var heap = await Task.Run(() => NadekoStats.Instance.Heap());
                    await e.Channel.SendMessage($"`Heap Size:` {heap}");
                });
                cgb.CreateCommand(Prefix + "prune")
                .Parameter("num", ParameterType.Required)
                .Description("Prunes a number of messages from the current channel.\n**Usage**: .prune 5")
                .Do(async e => {
                    if (!e.User.ServerPermissions.ManageMessages)
                    {
                        return;
                    }
                    int val;
                    if (string.IsNullOrWhiteSpace(e.GetArg("num")) || !int.TryParse(e.GetArg("num"), out val) || val < 0)
                    {
                        return;
                    }

                    foreach (var msg in await e.Channel.DownloadMessages(val))
                    {
                        await msg.Delete();
                        await Task.Delay(100);
                    }
                });

                cgb.CreateCommand(Prefix + "die")
                .Alias(Prefix + "graceful")
                .Description("Works only for the owner. Shuts the bot down and notifies users about the restart.")
                .Do(async e => {
                    if (NadekoBot.IsOwner(e.User.Id))
                    {
                        await e.Channel.SendMessage("`Shutting down.`");
                        await Task.Delay(2000);
                        Environment.Exit(0);
                    }
                });

                cgb.CreateCommand(Prefix + "clr")
                .Description("Clears some of Nadeko's (or some other user's if supplied) messages from the current channel.\n**Usage**: .clr @X")
                .Parameter("user", ParameterType.Unparsed)
                .Do(async e => {
                    var usrId = NadekoBot.Client.CurrentUser.Id;
                    if (!string.IsNullOrWhiteSpace(e.GetArg("user")) && e.User.ServerPermissions.ManageMessages)
                    {
                        var usr = e.Server.FindUsers(e.GetArg("user")).FirstOrDefault();
                        if (usr != null)
                        {
                            usrId = usr.Id;
                        }
                    }
                    await Task.Run(async() => {
                        var msgs = (await e.Channel.DownloadMessages(100)).Where(m => m.User.Id == usrId);
                        foreach (var m in msgs)
                        {
                            try {
                                await m.Delete();
                            } catch { }
                            await Task.Delay(200);
                        }
                    });
                });

                cgb.CreateCommand(Prefix + "newname")
                .Alias(Prefix + "setname")
                .Description("Give the bot a new name.")
                .Parameter("new_name", ParameterType.Unparsed)
                .Do(async e => {
                    if (!NadekoBot.IsOwner(e.User.Id) || e.GetArg("new_name") == null)
                    {
                        return;
                    }

                    await client.CurrentUser.Edit(NadekoBot.Creds.Password, e.GetArg("new_name"));
                });

                cgb.CreateCommand(Prefix + "newavatar")
                .Alias(Prefix + "setavatar")
                .Description("Sets a new avatar image for the NadekoBot.")
                .Parameter("img", ParameterType.Unparsed)
                .Do(async e => {
                    if (!NadekoBot.IsOwner(e.User.Id) || string.IsNullOrWhiteSpace(e.GetArg("img")))
                    {
                        return;
                    }
                    // Gather user provided URL.
                    var avatarAddress = e.GetArg("img");
                    var imageStream   = await SearchHelper.GetResponseStreamAsync(avatarAddress);
                    var image         = System.Drawing.Image.FromStream(imageStream);
                    // Save the image to disk.
                    image.Save("data/avatar.png", System.Drawing.Imaging.ImageFormat.Png);
                    await client.CurrentUser.Edit(NadekoBot.Creds.Password, avatar: image.ToStream());
                    // Send confirm.
                    await e.Channel.SendMessage("New avatar set.");
                });

                cgb.CreateCommand(Prefix + "setgame")
                .Description("Sets the bots game.")
                .Parameter("set_game", ParameterType.Unparsed)
                .Do(e => {
                    if (!NadekoBot.IsOwner(e.User.Id) || e.GetArg("set_game") == null)
                    {
                        return;
                    }

                    client.SetGame(e.GetArg("set_game"));
                });

                cgb.CreateCommand(Prefix + "checkmyperms")
                .Description("Checks your userspecific permissions on this channel.")
                .Do(async e => {
                    var output = "```\n";
                    foreach (var p in e.User.ServerPermissions.GetType().GetProperties().Where(p => !p.GetGetMethod().GetParameters().Any()))
                    {
                        output += p.Name + ": " + p.GetValue(e.User.ServerPermissions, null).ToString() + "\n";
                    }
                    output += "```";
                    await e.User.SendMessage(output);
                });

                Server commsServer   = null;
                User commsUser       = null;
                Channel commsChannel = null;

                cgb.CreateCommand(Prefix + "commsuser")
                .Description("Sets a user for through-bot communication. Only works if server is set. Resets commschannel.**Owner only**.")
                .Parameter("name", ParameterType.Unparsed)
                .Do(async e => {
                    if (!NadekoBot.IsOwner(e.User.Id))
                    {
                        return;
                    }
                    commsUser = commsServer?.FindUsers(e.GetArg("name")).FirstOrDefault();
                    if (commsUser != null)
                    {
                        commsChannel = null;
                        await e.Channel.SendMessage("User for comms set.");
                    }
                    else
                    {
                        await e.Channel.SendMessage("No server specified or user.");
                    }
                });

                cgb.CreateCommand(Prefix + "commsserver")
                .Description("Sets a server for through-bot communication.**Owner only**.")
                .Parameter("server", ParameterType.Unparsed)
                .Do(async e => {
                    if (!NadekoBot.IsOwner(e.User.Id))
                    {
                        return;
                    }
                    commsServer = client.FindServers(e.GetArg("server")).FirstOrDefault();
                    if (commsServer != null)
                    {
                        await e.Channel.SendMessage("Server for comms set.");
                    }
                    else
                    {
                        await e.Channel.SendMessage("No such server.");
                    }
                });

                cgb.CreateCommand(Prefix + "commschannel")
                .Description("Sets a channel for through-bot communication. Only works if server is set. Resets commsuser.**Owner only**.")
                .Parameter("ch", ParameterType.Unparsed)
                .Do(async e => {
                    if (!NadekoBot.IsOwner(e.User.Id))
                    {
                        return;
                    }
                    commsChannel = commsServer?.FindChannels(e.GetArg("ch"), ChannelType.Text).FirstOrDefault();
                    if (commsChannel != null)
                    {
                        commsUser = null;
                        await e.Channel.SendMessage("Server for comms set.");
                    }
                    else
                    {
                        await e.Channel.SendMessage("No server specified or channel is invalid.");
                    }
                });

                cgb.CreateCommand(Prefix + "send")
                .Description("Send a message to someone on a different server through the bot.**Owner only.**\n **Usage**: .send Message text multi word!")
                .Parameter("msg", ParameterType.Unparsed)
                .Do(async e => {
                    if (!NadekoBot.IsOwner(e.User.Id))
                    {
                        return;
                    }
                    if (commsUser != null)
                    {
                        await commsUser.SendMessage(e.GetArg("msg"));
                    }
                    else if (commsChannel != null)
                    {
                        await commsChannel.SendMessage(e.GetArg("msg"));
                    }
                    else
                    {
                        await e.Channel.SendMessage("Failed. Make sure you've specified server and [channel or user]");
                    }
                });

                cgb.CreateCommand(Prefix + "menrole")
                .Alias(Prefix + "mentionrole")
                .Description("Mentions every person from the provided role or roles (separated by a ',') on this server. Requires you to have mention everyone permission.")
                .Parameter("roles", ParameterType.Unparsed)
                .Do(async e => {
                    await Task.Run(async() => {
                        if (!e.User.ServerPermissions.MentionEveryone)
                        {
                            return;
                        }
                        var arg     = e.GetArg("roles").Split(',').Select(r => r.Trim());
                        string send = $"--{e.User.Mention} has invoked a mention on the following roles--";
                        foreach (var roleStr in arg.Where(str => !string.IsNullOrWhiteSpace(str)))
                        {
                            var role = e.Server.FindRoles(roleStr).FirstOrDefault();
                            if (role == null)
                            {
                                continue;
                            }
                            send += $"\n`{role.Name}`\n";
                            send += string.Join(", ", role.Members.Select(r => r.Mention));
                        }

                        while (send.Length > 2000)
                        {
                            var curstr = send.Substring(0, 2000);
                            await
                            e.Channel.Send(curstr.Substring(0,
                                                            curstr.LastIndexOf(", ", StringComparison.Ordinal) + 1));
                            send = curstr.Substring(curstr.LastIndexOf(", ", StringComparison.Ordinal) + 1) +
                                   send.Substring(2000);
                        }
                        await e.Channel.Send(send);
                    });
                });

                cgb.CreateCommand(Prefix + "parsetosql")
                .Description("Loads exported parsedata from /data/parsedata/ into sqlite database.")
                .Do(async e => {
                    if (!NadekoBot.IsOwner(e.User.Id))
                    {
                        return;
                    }
                    await Task.Run(() => {
                        SaveParseToDb <Announcement>("data/parsedata/Announcements.json");
                        SaveParseToDb <Classes._DataModels.Command>("data/parsedata/CommandsRan.json");
                        SaveParseToDb <Request>("data/parsedata/Requests.json");
                        SaveParseToDb <Stats>("data/parsedata/Stats.json");
                        SaveParseToDb <TypingArticle>("data/parsedata/TypingArticles.json");
                    });
                });

                cgb.CreateCommand(Prefix + "unstuck")
                .Description("Clears the message queue. **OWNER ONLY**")
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(e => {
                    NadekoBot.Client.MessageQueue.Clear();
                });

                cgb.CreateCommand(Prefix + "donators")
                .Description("List of lovely people who donated to keep this project alive.")
                .Do(async e => {
                    await Task.Run(async() => {
                        var rows            = DbHandler.Instance.GetAllRows <Donator>();
                        var donatorsOrdered = rows.OrderByDescending(d => d.Amount);
                        string str          = $"**Thanks to the people listed below for making this project happen!**\n";

                        await e.Channel.SendMessage(str + string.Join("⭐", donatorsOrdered.Select(d => d.UserName)));
                    });
                });

                //THIS IS INTENTED TO BE USED ONLY BY THE ORIGINAL BOT OWNER
                cgb.CreateCommand(Prefix + "adddon")
                .Alias(Prefix + "donadd")
                .Description("Add a donator to the database.")
                .Parameter("donator")
                .Parameter("amount")
                .Do(async e => {
                    await Task.Run(() => {
                        if (!NadekoBot.IsOwner(e.User.Id))
                        {
                            return;
                        }
                        var donator = e.Server.FindUsers(e.GetArg("donator")).FirstOrDefault();
                        var amount  = int.Parse(e.GetArg("amount"));
                        if (donator == null)
                        {
                            return;
                        }
                        try {
                            DbHandler.Instance.InsertData(new Donator {
                                Amount   = amount,
                                UserName = donator.Name,
                                UserId   = (long)e.User.Id
                            });
                            e.Channel.SendMessage("Successfuly added a new donator. 👑");
                        } catch { }
                    });
                });

                cgb.CreateCommand(Prefix + "videocall")
                .Description("Creates a private appear.in video call link for you and other mentioned people. The link is sent to mentioned people via a private message.")
                .Parameter("arg", ParameterType.Unparsed)
                .Do(async e => {
                    try {
                        var allUsrs      = e.Message.MentionedUsers.Union(new User[] { e.User });
                        var allUsrsArray = allUsrs as User[] ?? allUsrs.ToArray();
                        var str          = allUsrsArray.Aggregate("http://appear.in/", (current, usr) => current + Uri.EscapeUriString(usr.Name[0].ToString()));
                        str += new Random().Next();
                        foreach (var usr in allUsrsArray)
                        {
                            await usr.SendMessage(str);
                        }
                    } catch (Exception ex) {
                        Console.WriteLine(ex);
                    }
                });
            });
        }
        public Expression <Func <TEntityType, bool> > GetFilterLambda(string value, Comparator comparator)
        {
            var propertyPredicate = SearchHelper.GetLambdaExpression <TCollectionEntityType, TPropertyType>(Field, property, value, comparator);

            return(this.collection.GetPredicate <TPropertyType>(propertyPredicate));
        }
        public string SearchModelObj(BrowseResultsModel model)
        {
            var searchModel = new SearchResultsModel();
            searchModel.Dates = model.Dates;
            searchModel.Location = model.Location;
            searchModel.FirstName = model.FirstName;
            searchModel.LastName = model.LastName;
            searchModel.AllOfTheWordsString = model.AllOfTheWordsString;
            searchModel.ExactPhraseString = model.ExactPhraseString;
            searchModel.AnyOfTheWordsString = model.AnyOfTheWordsString;
            searchModel.WithoutWordsString = model.WithoutWordsString;

            if (!string.IsNullOrWhiteSpace(searchModel.AllOfTheWordsString)) { if (searchModel.AllOfTheWordsString.Trim().ToLower() == "battle gettysburg civil war") { searchModel.AllOfTheWordsString = ""; } }
            if (!string.IsNullOrWhiteSpace(searchModel.AnyOfTheWordsString)) { if (searchModel.AnyOfTheWordsString.Trim().ToLower() == "soldier infantry") { searchModel.AnyOfTheWordsString = ""; } }
            if (!string.IsNullOrWhiteSpace(searchModel.ExactPhraseString)) { if (searchModel.ExactPhraseString.Trim().ToLower() == "john smith buried") { searchModel.ExactPhraseString = ""; } }
            if (!string.IsNullOrWhiteSpace(searchModel.WithoutWordsString)) { if (searchModel.WithoutWordsString.Trim().ToLower() == "adams george henry") { searchModel.WithoutWordsString = ""; } }

            if (String.IsNullOrWhiteSpace(searchModel.AllOfTheWordsString) && String.IsNullOrWhiteSpace(searchModel.ExactPhraseString) && String.IsNullOrWhiteSpace(searchModel.AnyOfTheWordsString) && String.IsNullOrWhiteSpace(searchModel.LastName))
            {
                return string.Empty;
            }

            var helper = new SearchHelper(_savedSearchService, _common);
            if (searchModel.Dates.IsPublicationDate == false) { searchModel.Dates = new DateModels(); }
            else
            {
                if (searchModel.Dates.IsExactDate == true)
                {
                    searchModel.Dates.EndYear = "";
                    searchModel.Dates.EndMonth = "";
                    searchModel.Dates.EndDay = "";
                }
                if (searchModel.Dates.IsBetweenYears == true)
                {
                    searchModel.Dates.StartYear = searchModel.Dates.BetweenStartYear;
                    searchModel.Dates.EndYear = searchModel.Dates.BetweenEndYear;

                    searchModel.Dates.StartMonth = "";
                    searchModel.Dates.StartDay = "";
                    searchModel.Dates.EndMonth = "";
                    searchModel.Dates.EndDay = "";
                }
                if (searchModel.Dates.IsBetweenDates == true)
                {
                    searchModel.Dates.StartYear = searchModel.Dates.BetweenDatesYear;
                    searchModel.Dates.StartMonth = searchModel.Dates.BetweenDatesMonth;
                    searchModel.Dates.StartDay = searchModel.Dates.BetweenDatesDay;
                }
            }

            if (searchModel.Location.IsPublicationLocation == false) { searchModel.Location = new LocationModels(); }
            string _url = helper.getURLfromSearchValues(searchModel, "", 0);

            return _url;
        }
Example #15
0
        public override void Install(ModuleManager manager)
        {
            manager.CreateCommands("", cgb =>
            {
                cgb.AddCheck(PermissionChecker.Instance);

                commands.ForEach(cmd => cmd.Init(cgb));

                cgb.CreateCommand(Prefix + "permrole")
                .Alias(Prefix + "pr")
                .Description($"Sets a role which can change permissions. Or supply no parameters to find out the current one. Default one is 'WizBot'. | `{Prefix}pr role`")
                .Parameter("role", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (string.IsNullOrWhiteSpace(e.GetArg("role")))
                    {
                        await e.Channel.SendMessage($"Current permissions role is `{PermissionsHandler.GetServerPermissionsRoleName(e.Server)}`").ConfigureAwait(false);
                        return;
                    }

                    var arg           = e.GetArg("role");
                    Discord.Role role = null;
                    try
                    {
                        role = PermissionHelper.ValidateRole(e.Server, arg);
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        await e.Channel.SendMessage($"Role `{arg}` probably doesn't exist. Create the role with that name first.").ConfigureAwait(false);
                        return;
                    }
                    await PermissionsHandler.SetPermissionsRole(e.Server, role.Name).ConfigureAwait(false);
                    await e.Channel.SendMessage($"Role `{role.Name}` is now required in order to change permissions.").ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "rolepermscopy")
                .Alias(Prefix + "rpc")
                .Description($"Copies BOT PERMISSIONS (not discord permissions) from one role to another. |`{Prefix}rpc Some Role ~ Some other role`")
                .Parameter("from_to", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var arg = e.GetArg("from_to")?.Trim();
                    if (string.IsNullOrWhiteSpace(arg) || !arg.Contains('~'))
                    {
                        return;
                    }
                    var args = arg.Split('~').Select(a => a.Trim()).ToArray();
                    if (args.Length > 2)
                    {
                        await e.Channel.SendMessage("💢Invalid number of '~'s in the argument.").ConfigureAwait(false);
                        return;
                    }
                    try
                    {
                        var fromRole = PermissionHelper.ValidateRole(e.Server, args[0]);
                        var toRole   = PermissionHelper.ValidateRole(e.Server, args[1]);

                        await PermissionsHandler.CopyRolePermissions(fromRole, toRole).ConfigureAwait(false);
                        await e.Channel.SendMessage($"Copied permission settings from **{fromRole.Name}** to **{toRole.Name}**.").ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage($"💢{ex.Message}").ConfigureAwait(false);
                    }
                });
                cgb.CreateCommand(Prefix + "chnlpermscopy")
                .Alias(Prefix + "cpc")
                .Description($"Copies BOT PERMISSIONS (not discord permissions) from one channel to another. |`{Prefix}cpc Some Channel ~ Some other channel`")
                .Parameter("from_to", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var arg = e.GetArg("from_to")?.Trim();
                    if (string.IsNullOrWhiteSpace(arg) || !arg.Contains('~'))
                    {
                        return;
                    }
                    var args = arg.Split('~').Select(a => a.Trim()).ToArray();
                    if (args.Length > 2)
                    {
                        await e.Channel.SendMessage("💢Invalid number of '~'s in the argument.");
                        return;
                    }
                    try
                    {
                        var fromChannel = PermissionHelper.ValidateChannel(e.Server, args[0]);
                        var toChannel   = PermissionHelper.ValidateChannel(e.Server, args[1]);

                        await PermissionsHandler.CopyChannelPermissions(fromChannel, toChannel).ConfigureAwait(false);
                        await e.Channel.SendMessage($"Copied permission settings from **{fromChannel.Name}** to **{toChannel.Name}**.").ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage($"💢{ex.Message}");
                    }
                });
                cgb.CreateCommand(Prefix + "usrpermscopy")
                .Alias(Prefix + "upc")
                .Description($"Copies BOT PERMISSIONS (not discord permissions) from one role to another. |`{Prefix}upc @SomeUser ~ @SomeOtherUser`")
                .Parameter("from_to", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var arg = e.GetArg("from_to")?.Trim();
                    if (string.IsNullOrWhiteSpace(arg) || !arg.Contains('~'))
                    {
                        return;
                    }
                    var args = arg.Split('~').Select(a => a.Trim()).ToArray();
                    if (args.Length > 2)
                    {
                        await e.Channel.SendMessage("💢Invalid number of '~'s in the argument.").ConfigureAwait(false);
                        return;
                    }
                    try
                    {
                        var fromUser = PermissionHelper.ValidateUser(e.Server, args[0]);
                        var toUser   = PermissionHelper.ValidateUser(e.Server, args[1]);

                        await PermissionsHandler.CopyUserPermissions(fromUser, toUser).ConfigureAwait(false);
                        await e.Channel.SendMessage($"Copied permission settings from **{fromUser.ToString()}**to * *{toUser.ToString()}**.").ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage($"💢{ex.Message}");
                    }
                });

                cgb.CreateCommand(Prefix + "verbose")
                .Alias(Prefix + "v")
                .Description($"Sets whether to show when a command/module is blocked. | `{Prefix}verbose true`")
                .Parameter("arg", ParameterType.Required)
                .Do(async e =>
                {
                    var arg = e.GetArg("arg");
                    var val = PermissionHelper.ValidateBool(arg);
                    await PermissionsHandler.SetVerbosity(e.Server, val).ConfigureAwait(false);
                    await e.Channel.SendMessage($"Verbosity set to {val}.").ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "srvrperms")
                .Alias(Prefix + "sp")
                .Description($"Shows banned permissions for this server. | `{Prefix}sp`")
                .Do(async e =>
                {
                    var perms = PermissionsHandler.GetServerPermissions(e.Server);
                    if (string.IsNullOrWhiteSpace(perms?.ToString()))
                    {
                        await e.Channel.SendMessage("No permissions set for this server.").ConfigureAwait(false);
                    }
                    await e.Channel.SendMessage(perms.ToString()).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "roleperms")
                .Alias(Prefix + "rp")
                .Description($"Shows banned permissions for a certain role. No argument means for everyone. | `{Prefix}rp AwesomeRole`")
                .Parameter("role", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var arg  = e.GetArg("role");
                    var role = e.Server.EveryoneRole;
                    if (!string.IsNullOrWhiteSpace(arg))
                    {
                        try
                        {
                            role = PermissionHelper.ValidateRole(e.Server, arg);
                        }
                        catch (Exception ex)
                        {
                            await e.Channel.SendMessage("💢 Error: " + ex.Message).ConfigureAwait(false);
                            return;
                        }
                    }

                    var perms = PermissionsHandler.GetRolePermissionsById(e.Server, role.Id);

                    if (string.IsNullOrWhiteSpace(perms?.ToString()))
                    {
                        await e.Channel.SendMessage($"No permissions set for **{role.Name}** role.").ConfigureAwait(false);
                    }
                    await e.Channel.SendMessage(perms.ToString()).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "chnlperms")
                .Alias(Prefix + "cp")
                .Description($"Shows banned permissions for a certain channel. No argument means for this channel. | `{Prefix}cp #dev`")
                .Parameter("channel", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var arg     = e.GetArg("channel");
                    var channel = e.Channel;
                    if (!string.IsNullOrWhiteSpace(arg))
                    {
                        try
                        {
                            channel = PermissionHelper.ValidateChannel(e.Server, arg);
                        }
                        catch (Exception ex)
                        {
                            await e.Channel.SendMessage("💢 Error: " + ex.Message).ConfigureAwait(false);
                            return;
                        }
                    }

                    var perms = PermissionsHandler.GetChannelPermissionsById(e.Server, channel.Id);
                    if (string.IsNullOrWhiteSpace(perms?.ToString()))
                    {
                        await e.Channel.SendMessage($"No permissions set for **{channel.Name}** channel.").ConfigureAwait(false);
                    }
                    await e.Channel.SendMessage(perms.ToString()).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "userperms")
                .Alias(Prefix + "up")
                .Description($"Shows banned permissions for a certain user. No argument means for yourself. | `{Prefix}up Wizkiller96`")
                .Parameter("user", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var user = e.User;
                    if (!string.IsNullOrWhiteSpace(e.GetArg("user")))
                    {
                        try
                        {
                            user = PermissionHelper.ValidateUser(e.Server, e.GetArg("user"));
                        }
                        catch (Exception ex)
                        {
                            await e.Channel.SendMessage("💢 Error: " + ex.Message).ConfigureAwait(false);
                            return;
                        }
                    }

                    var perms = PermissionsHandler.GetUserPermissionsById(e.Server, user.Id);
                    if (string.IsNullOrWhiteSpace(perms?.ToString()))
                    {
                        await e.Channel.SendMessage($"No permissions set for user **{user.Name}**.").ConfigureAwait(false);
                    }
                    await e.Channel.SendMessage(perms.ToString()).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "srvrmdl")
                .Alias(Prefix + "sm")
                .Parameter("module", ParameterType.Required)
                .Parameter("bool", ParameterType.Required)
                .Description($"Sets a module's permission at the server level. | `{Prefix}sm \"module name\" enable`")
                .Do(async e =>
                {
                    try
                    {
                        var module = PermissionHelper.ValidateModule(e.GetArg("module"));
                        var state  = PermissionHelper.ValidateBool(e.GetArg("bool"));

                        await PermissionsHandler.SetServerModulePermission(e.Server, module, state).ConfigureAwait(false);
                        await e.Channel.SendMessage($"Module **{module}** has been **{(state ? "enabled" : "disabled")}** on this server.").ConfigureAwait(false);
                    }
                    catch (ArgumentException exArg)
                    {
                        await e.Channel.SendMessage(exArg.Message).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage("Something went terribly wrong - " + ex.Message).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "srvrcmd").Alias(Prefix + "sc")
                .Parameter("command", ParameterType.Required)
                .Parameter("bool", ParameterType.Required)
                .Description($"Sets a command's permission at the server level. | `{Prefix}sc \"command name\" disable`")
                .Do(async e =>
                {
                    try
                    {
                        var command = PermissionHelper.ValidateCommand(e.GetArg("command"));
                        var state   = PermissionHelper.ValidateBool(e.GetArg("bool"));

                        await PermissionsHandler.SetServerCommandPermission(e.Server, command, state).ConfigureAwait(false);
                        await e.Channel.SendMessage($"Command **{command}** has been **{(state ? "enabled" : "disabled")}** on this server.").ConfigureAwait(false);
                    }
                    catch (ArgumentException exArg)
                    {
                        await e.Channel.SendMessage(exArg.Message).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage("Something went terribly wrong - " + ex.Message).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "rolemdl").Alias(Prefix + "rm")
                .Parameter("module", ParameterType.Required)
                .Parameter("bool", ParameterType.Required)
                .Parameter("role", ParameterType.Unparsed)
                .Description($"Sets a module's permission at the role level. | `{Prefix}rm \"module name\" enable MyRole`")
                .Do(async e =>
                {
                    try
                    {
                        var module = PermissionHelper.ValidateModule(e.GetArg("module"));
                        var state  = PermissionHelper.ValidateBool(e.GetArg("bool"));

                        if (e.GetArg("role")?.ToLower() == "all")
                        {
                            foreach (var role in e.Server.Roles)
                            {
                                await PermissionsHandler.SetRoleModulePermission(role, module, state).ConfigureAwait(false);
                            }
                            await e.Channel.SendMessage($"Module **{module}** has been **{(state ? "enabled" : "disabled")}** for **ALL** roles.").ConfigureAwait(false);
                        }
                        else
                        {
                            var role = PermissionHelper.ValidateRole(e.Server, e.GetArg("role"));

                            await PermissionsHandler.SetRoleModulePermission(role, module, state).ConfigureAwait(false);
                            await e.Channel.SendMessage($"Module **{module}** has been **{(state ? "enabled" : "disabled")}** for **{role.Name}** role.").ConfigureAwait(false);
                        }
                    }
                    catch (ArgumentException exArg)
                    {
                        await e.Channel.SendMessage(exArg.Message).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage("Something went terribly wrong - " + ex.Message).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "rolecmd").Alias(Prefix + "rc")
                .Parameter("command", ParameterType.Required)
                .Parameter("bool", ParameterType.Required)
                .Parameter("role", ParameterType.Unparsed)
                .Description($"Sets a command's permission at the role level. | `{Prefix}rc \"command name\" disable MyRole`")
                .Do(async e =>
                {
                    try
                    {
                        var command = PermissionHelper.ValidateCommand(e.GetArg("command"));
                        var state   = PermissionHelper.ValidateBool(e.GetArg("bool"));

                        if (e.GetArg("role")?.ToLower() == "all")
                        {
                            foreach (var role in e.Server.Roles)
                            {
                                await PermissionsHandler.SetRoleCommandPermission(role, command, state).ConfigureAwait(false);
                            }
                            await e.Channel.SendMessage($"Command **{command}** has been **{(state ? "enabled" : "disabled")}** for **ALL** roles.").ConfigureAwait(false);
                        }
                        else
                        {
                            var role = PermissionHelper.ValidateRole(e.Server, e.GetArg("role"));

                            await PermissionsHandler.SetRoleCommandPermission(role, command, state).ConfigureAwait(false);
                            await e.Channel.SendMessage($"Command **{command}** has been **{(state ? "enabled" : "disabled")}** for **{role.Name}** role.").ConfigureAwait(false);
                        }
                    }
                    catch (ArgumentException exArg)
                    {
                        await e.Channel.SendMessage(exArg.Message).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage("Something went terribly wrong - " + ex.Message).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "chnlmdl").Alias(Prefix + "cm")
                .Parameter("module", ParameterType.Required)
                .Parameter("bool", ParameterType.Required)
                .Parameter("channel", ParameterType.Unparsed)
                .Description($"Sets a module's permission at the channel level. | `{Prefix}cm \"module name\" enable SomeChannel`")
                .Do(async e =>
                {
                    try
                    {
                        var module     = PermissionHelper.ValidateModule(e.GetArg("module"));
                        var state      = PermissionHelper.ValidateBool(e.GetArg("bool"));
                        var channelArg = e.GetArg("channel");
                        if (channelArg?.ToLower() == "all")
                        {
                            foreach (var channel in e.Server.TextChannels)
                            {
                                await PermissionsHandler.SetChannelModulePermission(channel, module, state).ConfigureAwait(false);
                            }
                            await e.Channel.SendMessage($"Module **{module}** has been **{(state ? "enabled" : "disabled")}** on **ALL** channels.").ConfigureAwait(false);
                        }
                        else if (string.IsNullOrWhiteSpace(channelArg))
                        {
                            await PermissionsHandler.SetChannelModulePermission(e.Channel, module, state).ConfigureAwait(false);
                            await e.Channel.SendMessage($"Module **{module}** has been **{(state ? "enabled" : "disabled")}** for **{e.Channel.Name}** channel.").ConfigureAwait(false);
                        }
                        else
                        {
                            var channel = PermissionHelper.ValidateChannel(e.Server, channelArg);

                            await PermissionsHandler.SetChannelModulePermission(channel, module, state).ConfigureAwait(false);
                            await e.Channel.SendMessage($"Module **{module}** has been **{(state ? "enabled" : "disabled")}** for **{channel.Name}** channel.").ConfigureAwait(false);
                        }
                    }
                    catch (ArgumentException exArg)
                    {
                        await e.Channel.SendMessage(exArg.Message).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage("Something went terribly wrong - " + ex.Message).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "chnlcmd").Alias(Prefix + "cc")
                .Parameter("command", ParameterType.Required)
                .Parameter("bool", ParameterType.Required)
                .Parameter("channel", ParameterType.Unparsed)
                .Description($"Sets a command's permission at the channel level. | `{Prefix}cc \"command name\" enable SomeChannel`")
                .Do(async e =>
                {
                    try
                    {
                        var command = PermissionHelper.ValidateCommand(e.GetArg("command"));
                        var state   = PermissionHelper.ValidateBool(e.GetArg("bool"));

                        if (e.GetArg("channel")?.ToLower() == "all")
                        {
                            foreach (var channel in e.Server.TextChannels)
                            {
                                await PermissionsHandler.SetChannelCommandPermission(channel, command, state).ConfigureAwait(false);
                            }
                            await e.Channel.SendMessage($"Command **{command}** has been **{(state ? "enabled" : "disabled")}** on **ALL** channels.").ConfigureAwait(false);
                        }
                        else
                        {
                            var channel = PermissionHelper.ValidateChannel(e.Server, e.GetArg("channel"));

                            await PermissionsHandler.SetChannelCommandPermission(channel, command, state).ConfigureAwait(false);
                            await e.Channel.SendMessage($"Command **{command}** has been **{(state ? "enabled" : "disabled")}** for **{channel.Name}** channel.").ConfigureAwait(false);
                        }
                    }
                    catch (ArgumentException exArg)
                    {
                        await e.Channel.SendMessage(exArg.Message).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage("Something went terribly wrong - " + ex.Message).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "usrmdl").Alias(Prefix + "um")
                .Parameter("module", ParameterType.Required)
                .Parameter("bool", ParameterType.Required)
                .Parameter("user", ParameterType.Unparsed)
                .Description($"Sets a module's permission at the user level. | `{Prefix}um \"module name\" enable SomeUsername`")
                .Do(async e =>
                {
                    try
                    {
                        var module = PermissionHelper.ValidateModule(e.GetArg("module"));
                        var state  = PermissionHelper.ValidateBool(e.GetArg("bool"));
                        var user   = PermissionHelper.ValidateUser(e.Server, e.GetArg("user"));

                        await PermissionsHandler.SetUserModulePermission(user, module, state).ConfigureAwait(false);
                        await e.Channel.SendMessage($"Module **{module}** has been **{(state ? "enabled" : "disabled")}** for user **{user.Name}**.").ConfigureAwait(false);
                    }
                    catch (ArgumentException exArg)
                    {
                        await e.Channel.SendMessage(exArg.Message).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage("Something went terribly wrong - " + ex.Message).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "usrcmd").Alias(Prefix + "uc")
                .Parameter("command", ParameterType.Required)
                .Parameter("bool", ParameterType.Required)
                .Parameter("user", ParameterType.Unparsed)
                .Description($"Sets a command's permission at the user level. | `{Prefix}uc \"command name\" enable SomeUsername`")
                .Do(async e =>
                {
                    try
                    {
                        var command = PermissionHelper.ValidateCommand(e.GetArg("command"));
                        var state   = PermissionHelper.ValidateBool(e.GetArg("bool"));
                        var user    = PermissionHelper.ValidateUser(e.Server, e.GetArg("user"));

                        await PermissionsHandler.SetUserCommandPermission(user, command, state).ConfigureAwait(false);
                        await e.Channel.SendMessage($"Command **{command}** has been **{(state ? "enabled" : "disabled")}** for user **{user.Name}**.").ConfigureAwait(false);
                    }
                    catch (ArgumentException exArg)
                    {
                        await e.Channel.SendMessage(exArg.Message).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage("Something went terribly wrong - " + ex.Message).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "allsrvrmdls").Alias(Prefix + "asm")
                .Parameter("bool", ParameterType.Required)
                .Description($"Sets permissions for all modules at the server level. | `{Prefix}asm [enable/disable]`")
                .Do(async e =>
                {
                    try
                    {
                        var state = PermissionHelper.ValidateBool(e.GetArg("bool"));

                        foreach (var module in WizBot.Client.GetService <ModuleService>().Modules)
                        {
                            await PermissionsHandler.SetServerModulePermission(e.Server, module.Name, state).ConfigureAwait(false);
                        }
                        await e.Channel.SendMessage($"All modules have been **{(state ? "enabled" : "disabled")}** on this server.").ConfigureAwait(false);
                    }
                    catch (ArgumentException exArg)
                    {
                        await e.Channel.SendMessage(exArg.Message).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage("Something went terribly wrong - " + ex.Message).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "allsrvrcmds").Alias(Prefix + "asc")
                .Parameter("module", ParameterType.Required)
                .Parameter("bool", ParameterType.Required)
                .Description($"Sets permissions for all commands from a certain module at the server level. | `{Prefix}asc \"module name\" [enable/disable]`")
                .Do(async e =>
                {
                    try
                    {
                        var state  = PermissionHelper.ValidateBool(e.GetArg("bool"));
                        var module = PermissionHelper.ValidateModule(e.GetArg("module"));

                        foreach (var command in WizBot.Client.GetService <CommandService>().AllCommands.Where(c => c.Category == module))
                        {
                            await PermissionsHandler.SetServerCommandPermission(e.Server, command.Text, state).ConfigureAwait(false);
                        }
                        await e.Channel.SendMessage($"All commands from the **{module}** module have been **{(state ? "enabled" : "disabled")}** on this server.").ConfigureAwait(false);
                    }
                    catch (ArgumentException exArg)
                    {
                        await e.Channel.SendMessage(exArg.Message).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage("Something went terribly wrong - " + ex.Message).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "allchnlmdls").Alias(Prefix + "acm")
                .Parameter("bool", ParameterType.Required)
                .Parameter("channel", ParameterType.Unparsed)
                .Description($"Sets permissions for all modules at the channel level. | `{Prefix}acm [enable/disable] SomeChannel`")
                .Do(async e =>
                {
                    try
                    {
                        var state   = PermissionHelper.ValidateBool(e.GetArg("bool"));
                        var chArg   = e.GetArg("channel");
                        var channel = string.IsNullOrWhiteSpace(chArg) ? e.Channel : PermissionHelper.ValidateChannel(e.Server, chArg);
                        foreach (var module in WizBot.Client.GetService <ModuleService>().Modules)
                        {
                            await PermissionsHandler.SetChannelModulePermission(channel, module.Name, state).ConfigureAwait(false);
                        }

                        await e.Channel.SendMessage($"All modules have been **{(state ? "enabled" : "disabled")}** for **{channel.Name}** channel.").ConfigureAwait(false);
                    }
                    catch (ArgumentException exArg)
                    {
                        await e.Channel.SendMessage(exArg.Message).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage("Something went terribly wrong - " + ex.Message).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "allchnlcmds").Alias(Prefix + "acc")
                .Parameter("module", ParameterType.Required)
                .Parameter("bool", ParameterType.Required)
                .Parameter("channel", ParameterType.Unparsed)
                .Description($"Sets permissions for all commands from a certain module at the channel level. | `{Prefix}acc \"module name\" [enable/disable] SomeChannel`")
                .Do(async e =>
                {
                    try
                    {
                        var state   = PermissionHelper.ValidateBool(e.GetArg("bool"));
                        var module  = PermissionHelper.ValidateModule(e.GetArg("module"));
                        var channel = PermissionHelper.ValidateChannel(e.Server, e.GetArg("channel"));
                        foreach (var command in WizBot.Client.GetService <CommandService>().AllCommands.Where(c => c.Category == module))
                        {
                            await PermissionsHandler.SetChannelCommandPermission(channel, command.Text, state).ConfigureAwait(false);
                        }
                        await e.Channel.SendMessage($"All commands from the **{module}** module have been **{(state ? "enabled" : "disabled")}** for **{channel.Name}** channel.").ConfigureAwait(false);
                    }
                    catch (ArgumentException exArg)
                    {
                        await e.Channel.SendMessage(exArg.Message).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage("Something went terribly wrong - " + ex.Message).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "allrolemdls").Alias(Prefix + "arm")
                .Parameter("bool", ParameterType.Required)
                .Parameter("role", ParameterType.Unparsed)
                .Description($"Sets permissions for all modules at the role level. | `{Prefix}arm [enable/disable] MyRole`")
                .Do(async e =>
                {
                    try
                    {
                        var state = PermissionHelper.ValidateBool(e.GetArg("bool"));
                        var role  = PermissionHelper.ValidateRole(e.Server, e.GetArg("role"));
                        foreach (var module in WizBot.Client.GetService <ModuleService>().Modules)
                        {
                            await PermissionsHandler.SetRoleModulePermission(role, module.Name, state).ConfigureAwait(false);
                        }

                        await e.Channel.SendMessage($"All modules have been **{(state ? "enabled" : "disabled")}** for **{role.Name}** role.").ConfigureAwait(false);
                    }
                    catch (ArgumentException exArg)
                    {
                        await e.Channel.SendMessage(exArg.Message).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage("Something went terribly wrong - " + ex.Message).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "allrolecmds").Alias(Prefix + "arc")
                .Parameter("module", ParameterType.Required)
                .Parameter("bool", ParameterType.Required)
                .Parameter("role", ParameterType.Unparsed)
                .Description($"Sets permissions for all commands from a certain module at the role level. | `{Prefix}arc \"module name\" [enable/disable] MyRole`")
                .Do(async e =>
                {
                    try
                    {
                        var state  = PermissionHelper.ValidateBool(e.GetArg("bool"));
                        var module = PermissionHelper.ValidateModule(e.GetArg("module"));
                        if (e.GetArg("role")?.ToLower() == "all")
                        {
                            foreach (var role in e.Server.Roles)
                            {
                                foreach (var command in WizBot.Client.GetService <CommandService>().AllCommands.Where(c => c.Category == module))
                                {
                                    await PermissionsHandler.SetRoleCommandPermission(role, command.Text, state).ConfigureAwait(false);
                                }
                            }
                            await e.Channel.SendMessage($"All commands from the **{module}** module have been **{(state ? "enabled" : "disabled")}** for **all roles** role.").ConfigureAwait(false);
                        }
                        else
                        {
                            var role = PermissionHelper.ValidateRole(e.Server, e.GetArg("role"));

                            foreach (var command in WizBot.Client.GetService <CommandService>().AllCommands.Where(c => c.Category == module))
                            {
                                await PermissionsHandler.SetRoleCommandPermission(role, command.Text, state).ConfigureAwait(false);
                            }
                            await e.Channel.SendMessage($"All commands from the **{module}** module have been **{(state ? "enabled" : "disabled")}** for **{role.Name}** role.").ConfigureAwait(false);
                        }
                    }
                    catch (ArgumentException exArg)
                    {
                        await e.Channel.SendMessage(exArg.Message).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage("Something went terribly wrong - " + ex.Message).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "ubl")
                .Description($"Blacklists a mentioned user. **Bot Owner Only!**| `{Prefix}ubl [user_mention]`")
                .Parameter("user", ParameterType.Unparsed)
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(async e =>
                {
                    await Task.Run(async() =>
                    {
                        if (!e.Message.MentionedUsers.Any())
                        {
                            return;
                        }
                        var usr = e.Message.MentionedUsers.First();
                        WizBot.Config.UserBlacklist.Add(usr.Id);
                        await ConfigHandler.SaveConfig().ConfigureAwait(false);
                        await e.Channel.SendMessage($"`Sucessfully blacklisted user {usr.Name}`").ConfigureAwait(false);
                    }).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "uubl")
                .Description($"Unblacklists a mentioned user. **Bot Owner Only!** | `{Prefix}uubl [user_mention]`")
                .Parameter("user", ParameterType.Unparsed)
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(async e =>
                {
                    await Task.Run(async() =>
                    {
                        if (!e.Message.MentionedUsers.Any())
                        {
                            return;
                        }
                        var usr = e.Message.MentionedUsers.First();
                        if (WizBot.Config.UserBlacklist.Contains(usr.Id))
                        {
                            WizBot.Config.UserBlacklist.Remove(usr.Id);
                            await ConfigHandler.SaveConfig().ConfigureAwait(false);
                            await e.Channel.SendMessage($"`Sucessfully unblacklisted user {usr.Name}`").ConfigureAwait(false);
                        }
                        else
                        {
                            await e.Channel.SendMessage($"`{usr.Name} was not in blacklist`").ConfigureAwait(false);
                        }
                    }).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "cbl")
                .Description($"Blacklists a mentioned channel (#general for example). | `{Prefix}cbl #some_channel`")
                .Parameter("channel", ParameterType.Unparsed)
                .Do(async e =>
                {
                    await Task.Run(async() =>
                    {
                        if (!e.Message.MentionedChannels.Any())
                        {
                            return;
                        }
                        var ch = e.Message.MentionedChannels.First();
                        WizBot.Config.ChannelBlacklist.Add(ch.Id);
                        await ConfigHandler.SaveConfig().ConfigureAwait(false);
                        await e.Channel.SendMessage($"`Sucessfully blacklisted channel {ch.Name}`").ConfigureAwait(false);
                    }).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "cubl")
                .Description($"Unblacklists a mentioned channel (#general for example). | `{Prefix}cubl #some_channel`")
                .Parameter("channel", ParameterType.Unparsed)
                .Do(async e =>
                {
                    await Task.Run(async() =>
                    {
                        if (!e.Message.MentionedChannels.Any())
                        {
                            return;
                        }
                        var ch = e.Message.MentionedChannels.First();
                        if (WizBot.Config.ChannelBlacklist.Contains(ch.Id))
                        {
                            WizBot.Config.ChannelBlacklist.Remove(ch.Id);
                            await ConfigHandler.SaveConfig().ConfigureAwait(false);
                            await e.Channel.SendMessage($"`Sucessfully unblacklisted channel {ch.Name}`").ConfigureAwait(false);
                        }
                        else
                        {
                            await e.Channel.SendMessage($"`{ch.Name} was not in blacklist`").ConfigureAwait(false);
                        }
                    }).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "sbl")
                .Description($"Blacklists a server by a name or id (#general for example). **BOT OWNER ONLY** | `{Prefix}sbl [servername/serverid]`")
                .Parameter("server", ParameterType.Unparsed)
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(async e =>
                {
                    await Task.Run(async() =>
                    {
                        var arg = e.GetArg("server")?.Trim();
                        if (string.IsNullOrWhiteSpace(arg))
                        {
                            return;
                        }
                        var server = WizBot.Client.Servers.FirstOrDefault(s => s.Id.ToString() == arg) ??
                                     WizBot.Client.FindServers(arg.Trim()).FirstOrDefault();
                        if (server == null)
                        {
                            await e.Channel.SendMessage("Cannot find that server").ConfigureAwait(false);
                            return;
                        }
                        var serverId = server.Id;
                        WizBot.Config.ServerBlacklist.Add(serverId);
                        await ConfigHandler.SaveConfig().ConfigureAwait(false);
                        //cleanup trivias and typeracing
                        Modules.Games.Commands.Trivia.TriviaGame trivia;
                        TriviaCommands.RunningTrivias.TryRemove(serverId, out trivia);
                        TypingGame typeracer;
                        SpeedTyping.RunningContests.TryRemove(serverId, out typeracer);

                        await e.Channel.SendMessage($"`Sucessfully blacklisted server {server.Name}`").ConfigureAwait(false);
                    }).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "cmdcooldown")
                .Alias(Prefix + "cmdcd")
                .Description($"Sets a cooldown per user for a command. Set 0 to clear. **Needs Manager Messages Permissions**| `{Prefix}cmdcd \"some cmd\" 5`")
                .Parameter("command", ParameterType.Required)
                .Parameter("secs", ParameterType.Required)
                .AddCheck(SimpleCheckers.ManageMessages())
                .Do(async e =>
                {
                    try
                    {
                        var command = PermissionHelper.ValidateCommand(e.GetArg("command"));
                        var secsStr = e.GetArg("secs").Trim();
                        int secs;
                        if (!int.TryParse(secsStr, out secs) || secs < 0 || secs > 3600)
                        {
                            throw new ArgumentOutOfRangeException("secs", "Invalid second parameter. (Must be a number between 0 and 3600)");
                        }


                        await PermissionsHandler.SetCommandCooldown(e.Server, command, secs).ConfigureAwait(false);
                        if (secs == 0)
                        {
                            await e.Channel.SendMessage($"Command **{command}** has no coooldown now.").ConfigureAwait(false);
                        }
                        else
                        {
                            await e.Channel.SendMessage($"Command **{command}** now has a **{secs} {(secs==1 ? "second" : "seconds")}** cooldown.").ConfigureAwait(false);
                        }
                    }
                    catch (ArgumentException exArg)
                    {
                        await e.Channel.SendMessage(exArg.Message).ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage("Something went terribly wrong - " + ex.Message).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "allcmdcooldowns")
                .Alias(Prefix + "acmdcds")
                .Description($"Shows a list of all commands and their respective cooldowns. | `{Prefix}acmdcds`")
                .Do(async e =>
                {
                    ServerPermissions perms;
                    PermissionsHandler.PermissionsDict.TryGetValue(e.Server.Id, out perms);
                    if (perms == null)
                    {
                        return;
                    }

                    if (!perms.CommandCooldowns.Any())
                    {
                        await e.Channel.SendMessage("`No command cooldowns set.`").ConfigureAwait(false);
                        return;
                    }
                    await e.Channel.SendMessage(SearchHelper.ShowInPrettyCode(perms.CommandCooldowns.Select(c => c.Key + ": " + c.Value + " secs"), s => $"{s,-30}", 2)).ConfigureAwait(false);
                });
            });
        }
Example #16
0
        public override void Install(ModuleManager manager)
        {
            manager.CreateCommands("", cgb =>
            {
                cgb.AddCheck(PermissionChecker.Instance);

                cgb.CreateCommand(Prefix + "hentai")
                .Description($"Shows a random NSFW hentai image from gelbooru and danbooru with a given tag. Tag is optional but preffered. (multiple tags are appended with +) | `{Prefix}hentai yuri+kissing`")
                .Parameter("tag", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var tag = e.GetArg("tag")?.Trim() ?? "";

                    var links = await Task.WhenAll(SearchHelper.GetGelbooruImageLink("rating%3Aexplicit+" + tag), SearchHelper.GetDanbooruImageLink("rating%3Aexplicit+" + tag)).ConfigureAwait(false);

                    if (links.All(l => l == null))
                    {
                        await e.Channel.SendMessage("`No results.`");
                        return;
                    }

                    await e.Channel.SendMessage(String.Join("\n\n", links)).ConfigureAwait(false);
                });
                cgb.CreateCommand(Prefix + "danbooru")
                .Description($"Shows a random hentai image from danbooru with a given tag. Tag is optional but preffered. (multiple tags are appended with +) | `{Prefix}danbooru yuri+kissing`")
                .Parameter("tag", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var tag  = e.GetArg("tag")?.Trim() ?? "";
                    var link = await SearchHelper.GetDanbooruImageLink(tag).ConfigureAwait(false);
                    if (string.IsNullOrWhiteSpace(link))
                    {
                        await e.Channel.SendMessage("Search yielded no results ;(");
                    }
                    else
                    {
                        await e.Channel.SendMessage(link).ConfigureAwait(false);
                    }
                });
                cgb.CreateCommand(Prefix + "gelbooru")
                .Description($"Shows a random hentai image from gelbooru with a given tag. Tag is optional but preffered. (multiple tags are appended with +) | `{Prefix}gelbooru yuri+kissing`")
                .Parameter("tag", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var tag  = e.GetArg("tag")?.Trim() ?? "";
                    var link = await SearchHelper.GetGelbooruImageLink(tag).ConfigureAwait(false);
                    if (string.IsNullOrWhiteSpace(link))
                    {
                        await e.Channel.SendMessage("Search yielded no results ;(");
                    }
                    else
                    {
                        await e.Channel.SendMessage(link).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "rule34")
                .Description($"Shows a random image from rule34.xx with a given tag. Tag is optional but preffered. (multiple tags are appended with +) | `{Prefix}rule34 yuri+kissing`")
                .Parameter("tag", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var tag  = e.GetArg("tag")?.Trim() ?? "";
                    var link = await SearchHelper.GetRule34ImageLink(tag).ConfigureAwait(false);
                    if (string.IsNullOrWhiteSpace(link))
                    {
                        await e.Channel.SendMessage("Search yielded no results ;(");
                    }
                    else
                    {
                        await e.Channel.SendMessage(link).ConfigureAwait(false);
                    }
                });
                cgb.CreateCommand(Prefix + "e621")
                .Description($"Shows a random hentai image from e621.net with a given tag. Tag is optional but preffered. Use spaces for multiple tags. | `{Prefix}e621 yuri kissing`")
                .Parameter("tag", ParameterType.Unparsed)
                .Alias("!e621")
                .Do(async e =>
                {
                    var tag = e.GetArg("tag")?.Trim() ?? "";
                    await e.Channel.SendMessage(e.User.Mention + " " + await SearchHelper.GetE621ImageLink(tag).ConfigureAwait(false)).ConfigureAwait(false);
                });
                cgb.CreateCommand(Prefix + "cowzone")
                .Description("Shows a random hentai image from cow.zone.\n**Usage**: ~cowzone")
                .Parameter("tag", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var tag = e.GetArg("tag")?.Trim() ?? "";
                    await e.Channel.SendMessage(e.User.Mention + " " + await SearchHelper.GetCowZoneImageLink(tag).ConfigureAwait(false)).ConfigureAwait(false);
                });
                cgb.CreateCommand(Prefix + "cp")
                .Description($"We all know where this will lead you to. | `{Prefix}cp`")
                .Parameter("anything", ParameterType.Unparsed)
                .Do(async e =>
                {
                    await e.Channel.SendMessage("http://i.imgur.com/MZkY1md.jpg").ConfigureAwait(false);
                });
                cgb.CreateCommand(Prefix + "boobs")
                .Description($"Real adult content. | `{Prefix}boobs`")
                .Do(async e =>
                {
                    try
                    {
                        var obj = JArray.Parse(await SearchHelper.GetResponseStringAsync($"http://api.oboobs.ru/boobs/{rng.Next(0, 9380)}").ConfigureAwait(false))[0];
                        await e.Channel.SendMessage($"http://media.oboobs.ru/{ obj["preview"].ToString() }").ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage($"💢 {ex.Message}").ConfigureAwait(false);
                    }
                });
                cgb.CreateCommand(Prefix + "butts")
                .Alias(Prefix + "ass", Prefix + "butt")
                .Description($"Real adult content. | `{Prefix}butts` or `{Prefix}ass`")
                .Do(async e =>
                {
                    try
                    {
                        var obj = JArray.Parse(await SearchHelper.GetResponseStringAsync($"http://api.obutts.ru/butts/{rng.Next(0, 3373)}").ConfigureAwait(false))[0];
                        await e.Channel.SendMessage($"http://media.obutts.ru/{ obj["preview"].ToString() }").ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage($"💢 {ex.Message}").ConfigureAwait(false);
                    }
                });
            });
        }
        private void IniPersonalCenter()
        {
            int taskQuantity = 0;

            sql           = "select count(Id) from Task where status=0 and OwnerId='" + UserInfo.UserID + "'";
            taskQuantity  = DataHelper.QueryValue <int>(sql);
            sql           = "select count(Id)from BJKY_BeAdmin..WfWorkList where (State='New' and  isnull(OwnerUserId,'')<>'') and IsSign='" + UserInfo.UserID + "'";
            taskQuantity += DataHelper.QueryValue <int>(sql);
            sql           = @"select Count(Id) from BJKY_IntegratedManage..SurveyQuestion c where (select count(1) from BJKY_IntegratedManage..SurveyCommitHistory t
                  where t.SurveyId=c.Id and t.SurveyedUserId='" + UserInfo.UserID + "')=0 and (isnull(StatisticsPower,'')='' or PatIndex('%" + UserInfo.UserID + "%',StatisticsPower)>0)";
            taskQuantity += DataHelper.QueryValue <int>(sql);
            sql           = @"select count(Id) from BJKY_MiddleDB..TaskMiddle where (State='New' or State='0') and OwnerUserId='" + UserInfo.UserID + "'";
            taskQuantity += DataHelper.QueryValue <int>(sql);
            if (taskQuantity > 0)
            {
                divTask.Style.Remove("background-image");
                divTask.Style.Add("background-image", "url(/images/center/task2.png)");
                divTaskQuan.Visible   = true;
                divTaskQuan.InnerHtml = taskQuantity.ToString();
            }
            else
            {
                divTask.Style.Remove("background-image");
                divTask.Style.Add("background-image", "url(/images/center/task.png)");
                divTaskQuan.Visible = false;
            }
            int noticeQuan = 0;//统计未读通知公告数量通知和公告两种类型的ID TypeId in ('eb9db227-6adc-4dd1-8783-467aadc2d11b','a0365551-9017-49f2-b416-14c6bbd8be9b')

            sql        = @"select count(Id) from News where (TypeId='a0365551-9017-49f2-b416-14c6bbd8be9b' or TypeId='eb9db227-6adc-4dd1-8783-467aadc2d11b') and 
                PATINDEX ( '%" + UserInfo.UserID + "%' , ReadState )<=0 and State='2'";
            noticeQuan = DataHelper.QueryValue <int>(sql);
            if (noticeQuan > 0)
            {
                divNotice.Style.Remove("background-image");
                divNotice.Style.Add("background-image", "url(/images/center/notice2.png)");
                NoticeQuan.Visible   = true;
                NoticeQuan.InnerHtml = noticeQuan.ToString();
            }
            else
            {
                divNotice.Style.Remove("background-image");
                divNotice.Style.Add("background-image", "url(/images/center/notice.png)");
                NoticeQuan.Visible = false;
            }
            int        messageQuan = 0;
            ICriterion crit        = Expression.Or(Expression.Eq("IsReceiverDelete", false), Expression.IsNull("IsReceiverDelete"));

            crit = SearchHelper.IntersectCriterions(crit, Expression.IsNull(View_SysMessage.Prop_IsFirstView), Expression.Eq(View_SysMessage.Prop_ReceiveId, UserInfo.UserID)
                                                    , Expression.IsNull(View_SysMessage.Prop_IsDelete));
            View_SysMessage[] mgs = View_SysMessage.FindAll(SearchCriterion, crit);
            messageQuan = mgs.Length;
            if (messageQuan > 0)
            {
                divMessage.Style.Remove("background-image");
                divMessage.Style.Add("background-image", "url(/images/center/message2.png)");
                MessageQuan.Visible   = true;
                MessageQuan.InnerHtml = messageQuan.ToString();
            }
            else
            {
                divMessage.Style.Remove("background-image");
                divMessage.Style.Add("background-image", "url(/images/center/message.png)");
                MessageQuan.Visible = false;
            }
        }
Example #18
0
        /// <summary>
        /// 在文本中查找第一个关键字
        /// </summary>
        /// <param name="text">文本</param>
        /// <returns></returns>
        public virtual IllegalWordsSearchResult FindFirst(string text)
        {
            StringBuilder sb  = new StringBuilder(text);
            TrieNode      ptr = null;

            for (int i = 0; i < text.Length; i++)
            {
                char c;
                if (ToSenseWords(text[i], out c))
                {
                    sb[i] = c;
                }
                TrieNode tn;
                if (ptr == null)
                {
                    tn = _first[c];
                }
                else
                {
                    if (ptr.TryGetValue(c, out tn) == false)
                    {
                        tn = _first[c];
                    }
                }
                if (tn != null)
                {
                    if (tn.End)
                    {
                        foreach (var find in tn.Results)
                        {
                            var r = GetIllegalResult(find, c, i + 1 - find.Length, i, text, sb);
                            if (r != null)
                            {
                                return(r);
                            }
                        }
                    }
                }
                ptr = tn;
            }

            SearchHelper sh = new SearchHelper(ref _first, _jumpLength);

            for (int i = 0; i < text.Length; i++)
            {
                char c;
                if (ToSenseWords(text[i], out c))
                {
                    sb[i] = c;
                }
                if (sh.FindChar(c, i))
                {
                    foreach (var keywordInfos in sh.GetKeywords())
                    {
                        var r = GetIllegalResult(keywordInfos.Item3, c, keywordInfos.Item1, keywordInfos.Item2, text, sb);
                        if (r != null)
                        {
                            return(r);
                        }
                    }
                }
            }
            return(IllegalWordsSearchResult.Empty);
        }
Example #19
0
 /// <summary>
 /// Shortens a string URL
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="source"></param>
 /// <param name="action"></param>
 public static async Task <string> ShortenUrl(this string str) => await SearchHelper.ShortenUrl(str).ConfigureAwait(false);
        internal override void Init(CommandGroupBuilder cgb)
        {
            var Prefix = Module.Prefix;

            cgb.CreateCommand(Prefix + "addcustreact")
            .Alias(Prefix + "acr")
            .Description($"Add a custom reaction. Guide here: <http://WizBot.readthedocs.io/en/latest/Custom%20Reactions> **Bot Owner Only!**   | `{Prefix}acr \"hello\" Hi there %user%`")
            .AddCheck(SimpleCheckers.OwnerOnly())
            .Parameter("name", ParameterType.Required)
            .Parameter("message", ParameterType.Unparsed)
            .Do(async e =>
            {
                var name    = e.GetArg("name");
                var message = e.GetArg("message")?.Trim();
                if (string.IsNullOrWhiteSpace(message))
                {
                    await e.Channel.SendMessage($"Incorrect command usage. See -h {Prefix}acr for correct formatting").ConfigureAwait(false);
                    return;
                }
                if (WizBot.Config.CustomReactions.ContainsKey(name))
                {
                    WizBot.Config.CustomReactions[name].Add(message);
                }
                else
                {
                    WizBot.Config.CustomReactions.Add(name, new System.Collections.Generic.List <string>()
                    {
                        message
                    });
                }
                await Classes.JSONModels.ConfigHandler.SaveConfig().ConfigureAwait(false);
                await e.Channel.SendMessage($"Added {name} : {message}").ConfigureAwait(false);
            });

            cgb.CreateCommand(Prefix + "listcustreact")
            .Alias(Prefix + "lcr")
            .Description($"Lists custom reactions (paginated with 30 commands per page). Use 'all' instead of page number to get all custom reactions DM-ed to you.  |`{Prefix}lcr 1`")
            .Parameter("num", ParameterType.Required)
            .Do(async e =>
            {
                var numStr = e.GetArg("num");

                if (numStr.ToUpperInvariant() == "ALL")
                {
                    var fullstr = String.Join("\n", WizBot.Config.CustomReactions.Select(kvp => kvp.Key));
                    do
                    {
                        var str = string.Concat(fullstr.Take(1900));
                        fullstr = new string(fullstr.Skip(1900).ToArray());
                        await e.User.SendMessage("```xl\n" + str + "```");
                    } while (fullstr.Length != 0);
                    return;
                }
                int num;
                if (!int.TryParse(numStr, out num) || num <= 0)
                {
                    num = 1;
                }
                var cmds = GetCustomsOnPage(num - 1);
                if (!cmds.Any())
                {
                    await e.Channel.SendMessage("`There are no custom reactions.`");
                }
                else
                {
                    string result = SearchHelper.ShowInPrettyCode <string>(cmds, s => $"{s,-25}");    //People prefer starting with 1
                    await e.Channel.SendMessage($"`Showing page {num}:`\n" + result).ConfigureAwait(false);
                }
            });

            cgb.CreateCommand(Prefix + "showcustreact")
            .Alias(Prefix + "scr")
            .Description($"Shows all possible responses from a single custom reaction. |`{Prefix}scr %mention% bb`")
            .Parameter("name", ParameterType.Unparsed)
            .Do(async e =>
            {
                var name = e.GetArg("name")?.Trim();
                if (string.IsNullOrWhiteSpace(name))
                {
                    return;
                }
                if (!WizBot.Config.CustomReactions.ContainsKey(name))
                {
                    await e.Channel.SendMessage("`Can't find that custom reaction.`").ConfigureAwait(false);
                    return;
                }
                var items   = WizBot.Config.CustomReactions[name];
                var message = new StringBuilder($"Responses for {Format.Bold(name)}:\n");
                var last    = items.Last();

                int i = 1;
                foreach (var reaction in items)
                {
                    message.AppendLine($"[{i++}] " + Format.Code(Format.Escape(reaction)));
                }
                await e.Channel.SendMessage(message.ToString());
            });

            cgb.CreateCommand(Prefix + "editcustreact")
            .Alias(Prefix + "ecr")
            .Description($"Edits a custom reaction, arguments are custom reactions name, index to change, and a (multiword) message **Bot Owner Only** | `{Prefix}ecr \"%mention% disguise\" 2 Test 123`")
            .Parameter("name", ParameterType.Required)
            .Parameter("index", ParameterType.Required)
            .Parameter("message", ParameterType.Unparsed)
            .AddCheck(SimpleCheckers.OwnerOnly())
            .Do(async e =>
            {
                var name = e.GetArg("name")?.Trim();
                if (string.IsNullOrWhiteSpace(name))
                {
                    return;
                }
                var indexstr = e.GetArg("index")?.Trim();
                if (string.IsNullOrWhiteSpace(indexstr))
                {
                    return;
                }
                var msg = e.GetArg("message")?.Trim();
                if (string.IsNullOrWhiteSpace(msg))
                {
                    return;
                }



                if (!WizBot.Config.CustomReactions.ContainsKey(name))
                {
                    await e.Channel.SendMessage("`Could not find given commandname`").ConfigureAwait(false);
                    return;
                }

                int index;
                if (!int.TryParse(indexstr, out index) || index < 1 || index > WizBot.Config.CustomReactions[name].Count)
                {
                    await e.Channel.SendMessage("`Invalid index.`").ConfigureAwait(false);
                    return;
                }
                index = index - 1;
                WizBot.Config.CustomReactions[name][index] = msg;

                await Classes.JSONModels.ConfigHandler.SaveConfig().ConfigureAwait(false);
                await e.Channel.SendMessage($"Edited response #{index + 1} from `{name}`").ConfigureAwait(false);
            });

            cgb.CreateCommand(Prefix + "delcustreact")
            .Alias(Prefix + "dcr")
            .Description($"Deletes a custom reaction with given name (and optional index). **Bot Owner Only.**| `{Prefix}dcr \"Reaction Name\"` or `{Prefix}dcr \"Reaction Name\" 3`")
            .Parameter("name", ParameterType.Required)
            .Parameter("index", ParameterType.Optional)
            .AddCheck(SimpleCheckers.OwnerOnly())
            .Do(async e =>
            {
                var name = e.GetArg("name")?.Trim();
                if (string.IsNullOrWhiteSpace(name))
                {
                    return;
                }
                if (!WizBot.Config.CustomReactions.ContainsKey(name))
                {
                    await e.Channel.SendMessage("Could not find given commandname").ConfigureAwait(false);
                    return;
                }
                string message = "";
                int index;
                if (int.TryParse(e.GetArg("index")?.Trim() ?? "", out index))
                {
                    index = index - 1;
                    if (index < 0 || index > WizBot.Config.CustomReactions[name].Count)
                    {
                        await e.Channel.SendMessage("Given index was out of range").ConfigureAwait(false);
                        return;
                    }
                    WizBot.Config.CustomReactions[name].RemoveAt(index);
                    if (!WizBot.Config.CustomReactions[name].Any())
                    {
                        WizBot.Config.CustomReactions.Remove(name);
                    }
                    message = $"Deleted response #{index + 1} from `{name}`";
                }
                else
                {
                    WizBot.Config.CustomReactions.Remove(name);
                    message = $"Deleted custom reaction: `{name}`";
                }
                await Classes.JSONModels.ConfigHandler.SaveConfig().ConfigureAwait(false);
                await e.Channel.SendMessage(message).ConfigureAwait(false);
            });
        }
Example #21
0
    private void Page_Load(System.Object sender, System.EventArgs e)
    {
        objStyle = new StyleHelper();
            _SearchHelper = new SearchHelper();
            gtMess = m_refContentApi.EkMsgRef;
            AppPath = siteRef.AppPath;
            AppImgPath = siteRef.AppImgPath;
            CurrentUserId = siteRef.UserId;
            EnableMultilingual = siteRef.EnableMultilingual;

            ltrStyleSheet.Text = objStyle.GetClientScript();
            if (!String.IsNullOrEmpty(Request.QueryString["LangType"]))
            {
                 ContentLanguage = Convert.ToInt32(Request.QueryString["LangType"]);
                 siteRef.SetCookieValue("LastValidLanguageID", ContentLanguage.ToString());
            }
            else if (!String.IsNullOrEmpty(siteRef.GetCookieValue("LastValidLanguageID")))
            {
                ContentLanguage = Convert.ToInt32(siteRef.GetCookieValue("LastValidLanguageID"));
            }

            RegisterResources();
            SetServerJSVariables();

            if (m_refContentApi.RequestInformationRef.IsMembershipUser == 1 || m_refContentApi.RequestInformationRef.UserId == 0 || ! m_refContentApi.EkUserRef.IsAllowed(m_refContentApi.UserId, 0, "users", "IsAdmin", 0))
            {
                Response.Redirect(m_refContentApi.ApplicationPath + "Login.aspx", true);
                return;
            }

            StringBuilder sb = new StringBuilder();
            action = Request.QueryString["action"];
            if ("SubmitIntegratedFolder" == action || "UpdateIntegratedFolder" == action || action == "DeleteIntegratedFolder")
            {
                try
                {
                    if (("SubmitIntegratedFolder" == action) || ("UpdateIntegratedFolder" == action))
                        {
                            cIntegratedFolder = new IntegratedFolderData();
                            cIntegratedFolder.TypeId = System.Convert.ToInt32(Request.Form["integrated_id"]);
                            cIntegratedFolder.DirectoryName = Request.Form["frm_directoryname"];
                            cIntegratedFolder.ExcludeFiles = Request.Form["frm_excludefiles"];
                            cIntegratedFolder.IncludeFiles = Request.Form["frm_includefiles"];
                            cIntegratedFolder.ExcludeDirs = Request.Form["frm_excludedirs"];
                            if (Strings.LCase(Request.Form["frm_recursive"]) == "on")
                            {
                                cIntegratedFolder.Recursive = true;
                            }
                            else
                            {
                                cIntegratedFolder.Recursive = false;
                            }
                            cIntegratedFolder.UserName = Request.Form["DomainUserName"];
                            cIntegratedFolder.Password = Request.Form["Password"];

                            if (Path.IsPathRooted(cIntegratedFolder.DirectoryName))
                            {
                                cIntegratedFolder.AbsolutePath = cIntegratedFolder.DirectoryName;
                            }
                            else
                            {
                                cIntegratedFolder.AbsolutePath = (string) (EnsureTrailingSlash(HttpContext.Current.Request.MapPath((string) ("/" + cIntegratedFolder.DirectoryName))).Replace("/", "\\\\"));
                                if (! Directory.Exists(cIntegratedFolder.AbsolutePath))
                                {
                                    cIntegratedFolder.AbsolutePath = (string) (EnsureTrailingSlash(HttpContext.Current.Request.MapPath((string) ("~/" + cIntegratedFolder.DirectoryName))).Replace("/", "\\\\"));
                                }
                            }

                            if ("AddIntegratedFolder" == action)
                            {
                                m_refContentApi.EkContentRef.AddIntegratedFolder(cIntegratedFolder);
                            }
                            else
                            {
                               m_refContentApi.EkContentRef.UpdateIntegratedFolderByID(cIntegratedFolder);
                            }

                            if ("AddIntegratedFolder" == action)
                            {
                                Response.Redirect("integratedsearch.aspx?action=ViewAllIntegratedFolders");
                            }
                            else
                            {
                                Response.Redirect((string) ("integratedsearch.aspx?action=ViewIntegratedFolder&id=" + Request.Form["integrated_id"]));
                            }

                        }
                        else if (action == "DeleteIntegratedFolder")
                        {
                            m_refContentApi.EkContentRef.DeleteIntegratedFolder(System.Convert.ToInt64(Request.QueryString["id"]));
                            Response.Redirect("integratedsearch.aspx?action=ViewAllIntegratedFolders");
                        }

                }
                catch (Exception ex)
                {
                    DebugErrLit.Text = ex.Message;
                }
            }
            else
            {
                if (action == "ViewAllIntegratedFolders")
                {
                    pnlViewAllIntegratedFolders.Visible = true;
                    pnlAddEditViewIntegratedFolder.Visible = false;
                    ContentObj = siteRef.EkContentRef;
                    cIntegratedFolderArray = ContentObj.GetIntegratedFolders();
                    foreach (IntegratedFolderData cTempIntFolder in cIntegratedFolderArray)
                    {
                        sb.Append("<tr>").Append(Environment.NewLine);
                        sb.Append("  <td>").Append(Environment.NewLine);
                        sb.Append("     <a href=\"integratedsearch.aspx?action=ViewIntegratedFolder&id=").Append(cTempIntFolder.TypeId).Append("\" title=\"Click here to view Integrated Search Folder\">").Append(Environment.NewLine);
                        sb.Append(cTempIntFolder.DirectoryName).Append(Environment.NewLine);
                        sb.Append("     </a>").Append(Environment.NewLine);
                        sb.Append("  </td>").Append(Environment.NewLine);
                        sb.Append("  <td>").Append(cTempIntFolder.TypeId).Append("</td>").Append(Environment.NewLine);
                        sb.Append("  <td>").Append((cTempIntFolder.ExcludeFiles).Replace(",", ", ")).Append("</td>").Append(Environment.NewLine);
                        sb.Append("  <td>").Append((cTempIntFolder.IncludeFiles).Replace(",", ", ")).Append("</td>").Append(Environment.NewLine);
                        sb.Append("  <td>").Append((cTempIntFolder.ExcludeDirs).Replace(",", ", ")).Append("</td>").Append(Environment.NewLine);
                        sb.Append("  <td>").Append(cTempIntFolder.UserName).Append("</td>").Append(Environment.NewLine);
                        sb.Append("</tr>").Append(Environment.NewLine);
                    }
                    ltrFolderList.Text = sb.ToString();
                }
                else if ("AddIntegratedFolder" == action || "EditIntegratedFolder" == action || "ViewIntegratedFolder" == action)
                {
                    pnlViewAllIntegratedFolders.Visible = false;
                    pnlAddEditViewIntegratedFolder.Visible = true;

                    bool bNew = false;
                    bool bEdit = false;
                    ContentObj = siteRef.EkContentRef;

                    bNew = ("AddIntegratedFolder" == action);
                    bEdit = ("EditIntegratedFolder" == action);
                    bView = ("ViewIntegratedFolder" == action);
                    if (bNew)
                    {
                        id = 0;
                        strTitleMsg = gtMess.GetMessage("alt Click here to add Integrated Search Folder");
                        cIntegratedFolder = new IntegratedFolderData();
                    }
                    else
                    {
                        id = Convert.ToInt64(Request.QueryString["id"]);
                        if (bEdit)
                        {
                            strTitleMsg = gtMess.GetMessage("alt Edit Integrated Search Folder");
                        }
                        else if (bView)
                        {
                            strTitleMsg = gtMess.GetMessage("alt View Integrated Search Folder");
                        }
                        cIntegratedFolder = ContentObj.GetIntegratedFolderByID(id);
                    }

                    if (bNew)
                    {
                        strAction = "SubmitIntegratedFolder";
                    }
                    else
                    {
                        strAction = "UpdateIntegratedFolder";
                        strTitleMsg = strTitleMsg + " \"" + cIntegratedFolder.DirectoryName + "\"";
                    }

                    if (!bView)
                        Ektron.Cms.API.JS.RegisterJS(this, m_refContentApi.ApplicationPath + "java/optiontransfer.js", "EktronOptionTransferJS");

                    //Toolbar
                    sb = new StringBuilder();
                    if (bNew)
                    {
                        sb.Append(objStyle.GetButtonEventsWCaption(AppPath + "images/UI/Icons/back.png", "integratedsearch.aspx?action=ViewAllIntegratedFolders", gtMess.GetMessage("alt back button text"), gtMess.GetMessage("btn back"), "", StyleHelper.BackButtonCssClass, true));
                        sb.Append(objStyle.GetButtonEventsWCaption(AppPath + "images/UI/Icons/save.png", "#", gtMess.GetMessage("alt Click here to add this integrated search folder"), gtMess.GetMessage("btn save"), "Onclick=\"javascript:return SubmitForm('integratedform', 'VerifyIntegratedSearchForm()');\"", StyleHelper.SaveButtonCssClass, true));
                    }
                    else if (bEdit)
                    {
                        sb.Append(objStyle.GetButtonEventsWCaption(AppPath + "images/UI/Icons/back.png", "integratedsearch.aspx?action=ViewIntegratedFolder&id=" + id + "", gtMess.GetMessage("alt back button text"), gtMess.GetMessage("btn back"), "", StyleHelper.BackButtonCssClass, true));
                        sb.Append(objStyle.GetButtonEventsWCaption(AppPath + "images/UI/Icons/save.png", "#", gtMess.GetMessage("alt Click here to updated this integrated search folder"), gtMess.GetMessage("btn update"), "Onclick=\"javascript:return SubmitForm('integratedform', 'VerifyIntegratedSearchForm()');\"", StyleHelper.SaveButtonCssClass, true));
                    }
                    else if (bView)
                    {
                        sb.Append(objStyle.GetButtonEventsWCaption(AppPath + "images/UI/Icons/back.png", "integratedsearch.aspx?action=ViewAllIntegratedFolders", gtMess.GetMessage("alt back button text"), gtMess.GetMessage("btn back"), "", StyleHelper.BackButtonCssClass, true));
                        sb.Append(objStyle.GetButtonEventsWCaption(AppPath + "images/UI/Icons/contentEdit.png", "integratedsearch.aspx?action=EditIntegratedFolder&id=" + id + "", gtMess.GetMessage("alt Edit this integrated search folder"), gtMess.GetMessage("btn edit"), "", StyleHelper.EditButtonCssClass, true));
                        sb.Append(objStyle.GetButtonEventsWCaption(AppPath + "images/UI/Icons/delete.png", "integratedsearch.aspx?action=DeleteIntegratedFolder&id=" + id + "", gtMess.GetMessage("alt Delete this integrated search folder"), gtMess.GetMessage("btn delete"), "OnClick=\"return ConfirmDelete();\"", StyleHelper.DeleteButtonCssClass));
                    }
                    sb.Append(StyleHelper.ActionBarDivider);
                    sb.Append("<td>").Append(objStyle.GetHelpButton(action, "")).Append("</td>").Append(Environment.NewLine);
                    ltrToolBar.Text = sb.ToString();

                    //PageHolder
                    sb = new StringBuilder();
                    sb.Append("<table class=\"ektronForm\">	").Append(Environment.NewLine);
                    //tr
                    sb.Append("     <tr>").Append(Environment.NewLine);
                    sb.Append("         <td class=\"label\"><label for=\"DirectoryName\" title=\"Site Directory\">").Append(gtMess.GetMessage("lbl Site Directory")).Append("</label></td>").Append(Environment.NewLine);
                    if (bView)
                    {
                        sb.Append("     <td class=\"readOnlyValue\" title=\"").Append(cIntegratedFolder.DirectoryName).Append("\" >").Append(cIntegratedFolder.DirectoryName).Append("</td>").Append(Environment.NewLine);
                    }
                    else
                    {
                        sb.Append("     <td class=\"value\">").Append(Environment.NewLine);
                        sb.Append("         <input type=\"text\" title=\"Enter Directory Name here\" id=\"DirectoryName\" name=\"frm_directoryname\" maxlength=\"255\" value=\"").Append(EkFunctions.HtmlEncode(cIntegratedFolder.DirectoryName)).Append("\" />").Append(Environment.NewLine);
                        sb.Append("         <div class=\"ektronCaption\" title=\"Directory or virtual directory relative to site root\">").Append(gtMess.GetMessage("alt Directory or virtual directory relative to site root")).Append("</div>").Append(Environment.NewLine);
                        if (bNew || bEdit)
                            sb.Append("     <span class=\"ektronCaption\" style=\"color:Red\" title=\"Please make sure you create virtual directory first before adding the virtual directory name\">").Append(gtMess.GetMessage("alt the virtual directory name")).Append("</span>").Append(Environment.NewLine);
                        sb.Append("     </td>").Append(Environment.NewLine);
                    }
                    sb.Append("     </tr>").Append(Environment.NewLine);
                    if (!bNew)
                    {
                        sb.Append("  <tr>").Append(Environment.NewLine);
                        sb.Append("     <td class=\"label\" title=\"ID\">").Append(gtMess.GetMessage("id label")).Append("</td>").Append(Environment.NewLine);
                        sb.Append("     <td class=\"readOnlyValue\" title=\"").Append(cIntegratedFolder.TypeId).Append("\" >").Append(cIntegratedFolder.TypeId).Append("</td>").Append(Environment.NewLine);
                        sb.Append("  </tr>").Append(Environment.NewLine);
                    }
                    //tr
                    sb.Append("  <tr>").Append(Environment.NewLine);
                    sb.Append("     <td class=\"label\"><label for=\"Recursive\" title=\"Recursive\">").Append(gtMess.GetMessage("lbl Recursive")).Append(":</label></td>").Append(Environment.NewLine);
                    if (bView)
                        sb.Append("   <td class=\"readOnlyValue\" title=\"").Append(_SearchHelper.BoolToYesNo(cIntegratedFolder.Recursive)).Append("\" >").Append(_SearchHelper.BoolToYesNo(cIntegratedFolder.Recursive)).Append("</td>").Append(Environment.NewLine);
                    else
                        sb.Append("  <td class=\"value\"><input type=\"checkbox\" title=\"Recursive Option\" id=\"Recursive\" name=\"frm_recursive\" ").Append(_SearchHelper.CheckedAttr(cIntegratedFolder.Recursive)).Append(" /></td>").Append(Environment.NewLine);
                    sb.Append("  </tr>").Append(Environment.NewLine);

                    //tr
                    sb.Append("  <tr>").Append(Environment.NewLine);
                    sb.Append("      <td class=\"label\"><label for=\"IncludeFiles\" title=\"Exclude Directories\">").Append(gtMess.GetMessage("lbl exclude directories")).Append("</label></td>").Append(Environment.NewLine);
                    if (bView)
                    {
                        sb.Append("  <td class=\"readOnlyValue\" title=\"").Append((cIntegratedFolder.ExcludeDirs).Replace(",", ", ")).Append("\" >").Append((cIntegratedFolder.ExcludeDirs).Replace(",", ", ")).Append(":</td>").Append(Environment.NewLine);
                    }
                    else
                    {
                        sb.Append("  <td class=\"value\">").Append(Environment.NewLine);
                        sb.Append("    <input type=\"text\" title=\"Enter Exclude Directories here\" id=\"ExcludeDirs\" name=\"frm_excludedirs\" maxlength=\"255\" value=\"").Append(EkFunctions.HtmlEncode((cIntegratedFolder.ExcludeDirs).Replace(",", ", "))).Append("\"/>").Append(Environment.NewLine);
                        sb.Append("    <div class=\"ektronCaption\" title=\"Sub directories not to include in search\" >").Append(gtMess.GetMessage("alt Sub directories not to include in search")).Append("</div>").Append(Environment.NewLine);
                        sb.Append("  </td>").Append(Environment.NewLine);
                    }
                    sb.Append("  </tr>").Append(Environment.NewLine);
                    //tr
                    sb.Append("  <tr>").Append(Environment.NewLine);
                    sb.Append("     <td class=\"label\"><label for=\"ExcludeFiles\" title=\"Exclude Extensions\">").Append(gtMess.GetMessage("lbl exclude extension")).Append(":</label></td>").Append(Environment.NewLine);
                    if (bView)
                    {
                        sb.Append("  <td class=\"readOnlyValue\" title=\"").Append(cIntegratedFolder.ExcludeFiles).Append("\" >").Append(cIntegratedFolder.ExcludeFiles).Append("</td>").Append(Environment.NewLine);
                    }
                    else
                    {
                        sb.Append("  <td class=\"value\">").Append(Environment.NewLine);
                        sb.Append("     <input type=\"text\" title=\"Enter Excluded File Extensions here\" id=\"ExcludeFiles\" name=\"frm_excludefiles\" maxlength=\"255\" value=\"").Append(EkFunctions.HtmlEncode((cIntegratedFolder.ExcludeFiles).Replace(",", ", "))).Append("\" />").Append(Environment.NewLine);
                        sb.Append("     <div class=\"ektronCaption\" title=\"Extensions not to include *.aspx,*.ascx\">").Append(gtMess.GetMessage("alt Extensions not to include *.aspx,*.ascx")).Append("</div>").Append(Environment.NewLine);
                        sb.Append("  <td>").Append(Environment.NewLine);
                    }
                    sb.Append("  </tr>").Append(Environment.NewLine);
                    //tr
                    sb.Append("  <tr>").Append(Environment.NewLine);
                    sb.Append("       <td class=\"label\"><label for=\"IncludeFiles\" title=\"Include Extensions\">").Append(gtMess.GetMessage("lbl include extensions")).Append(":</label></td>").Append(Environment.NewLine);
                    if (bView)
                    {
                        sb.Append("   <td class=\"readOnlyValue\" title=\"").Append(cIntegratedFolder.IncludeFiles).Append("\">").Append(cIntegratedFolder.IncludeFiles).Append("</td>").Append(Environment.NewLine);
                    }
                    else
                    {
                        sb.Append("   <td class=\"value\">").Append(Environment.NewLine);
                        sb.Append("     <input type=\"text\" title=\"Enter Included File Extensions here\" id=\"IncludeFiles\" name=\"frm_includefiles\" maxlength=\"255\" value=\"").Append(EkFunctions.HtmlEncode((cIntegratedFolder.IncludeFiles).Replace(",", ", "))).Append("\"/>").Append(Environment.NewLine);
                        sb.Append("     <div class=\"ektronCaption\" title=\"*.html,*.doc exclude extensions is ignored if include is specified\">").Append(gtMess.GetMessage("alt extensions is ignored if include is specified")).Append("</div>").Append(Environment.NewLine);
                        sb.Append("   </td>").Append(Environment.NewLine);
                    }
                    sb.Append("  </tr>").Append(Environment.NewLine);
                    //tr
                    sb.Append("  <tr>").Append(Environment.NewLine);
                    sb.Append("     <td class=\"label\"><label title=\"Domain/User Name\" for=\"DomainUserName\">").Append(gtMess.GetMessage("lbl domain username")).Append(":</label></td>").Append(Environment.NewLine);
                    if (bView)
                    {
                        sb.Append("  <td class=\"readOnlyValue\">").Append(cIntegratedFolder.UserName).Append(Environment.NewLine);
                    }
                    else
                    {
                        sb.Append("  <td class=\"value\"><input type=\"text\" title=\"Enter Domain or User Name here\" id=\"DomainUserName\" name=\"DomainUserName\" maxlength=\"255\" value=\"").Append(EkFunctions.HtmlEncode(cIntegratedFolder.UserName)).Append("\"/>").Append(Environment.NewLine);
                    }
                    sb.Append("          <div class=\"ektronCaption\" title=\"Specify domain or username\">").Append(gtMess.GetMessage("alt domain username")).Append("</div>").Append(Environment.NewLine);
                    sb.Append("     </td>").Append(Environment.NewLine);
                    sb.Append("  </tr>").Append(Environment.NewLine);

                    if (bNew)
                    {
                        string integratedFolderNames = "";
                        cIntegratedFolderArray = ContentObj.GetIntegratedFolders();
                        foreach (IntegratedFolderData cTempIntFolder in cIntegratedFolderArray)
                        {
                            if (cTempIntFolder.DirectoryName != null && cTempIntFolder.DirectoryName.Length > 0)
                            {
                                if (integratedFolderNames.Length > 0)
                                {
                                    integratedFolderNames += ",";
                                }
                                integratedFolderNames += cTempIntFolder.DirectoryName;
                            }
                        }
                        sb.Append("<input type=\"hidden\" id=\"integrated_fol_names\" value=\"").Append(integratedFolderNames).Append("\" />").Append(Environment.NewLine);
                    }
                    ektronPageHolder.InnerHtml = sb.ToString();
                }
            }
    }
Example #22
0
 public meta_data50()
 {
     _StyleHelper = new StyleHelper();
     _SearchHelper = new SearchHelper();
     _ContentApi = new ContentAPI();
     _ApplicationName = _ContentApi.AppName;
     _ApplicationPath = _ContentApi.AppPath;
     _SitePath = _ContentApi.SitePath;
     _MessageHelper = _ContentApi.EkMsgRef;
     AppImgPath = siteRef.AppImgPath;
     CurrentUserId = siteRef.UserId;
     EnableMultilingual = siteRef.EnableMultilingual.ToString();
 }
 public TestInvalidMultipleSearchNumberType() : base()
 {
     customFields = SearchHelper.InitUserFieldNumberType(2);
 }
Example #24
0
 private static bool canAdd(List<SearchHelper> L, SearchHelper r)
 {
     foreach(SearchHelper elem in L)
     {
         if (elem.titlu == r.titlu)
             return false;
     }
     return true;
 }
        public void TestMultipleSearchSameFieldApplicationField(Enums.ResourceType resourceType, string fieldName, string condition, FieldType fieldType)
        {
            string fieldAlias = $"{resourceType.ToResourceName()}.{fieldName}";

            SearchHelper.ReadFailMultipleSearch(resourceType, fieldAlias, fieldAlias, condition, fieldType);
        }
Example #26
0
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        // Get current index id
        int indexId = QueryHelper.GetInteger("indexId", 0);

        // Get current index info object
        SearchIndexInfo sii = SearchIndexInfoProvider.GetSearchIndexInfo(indexId);

        if (sii?.IndexProvider.Equals(SearchIndexInfo.AZURE_SEARCH_PROVIDER, StringComparison.OrdinalIgnoreCase) ?? false)
        {
            ShowInformation(GetString("smartsearch.searchpreview.azure.unavailable"));
            searchPnl.Visible = false;

            return;
        }

        // Show information about limited features of smart search preview
        ShowInformation(GetString("smartsearch.searchpreview.limitedfeatures"));

        // Show warning if indes isn't ready yet
        if ((sii != null) && (SearchIndexInfoProvider.GetIndexStatus(sii) == IndexStatusEnum.NEW))
        {
            ShowWarning(GetString("srch.index.needrebuild"));
        }

        if (!RequestHelper.IsPostBack())
        {
            // Get current search text from query string
            string searchText = QueryHelper.GetString("searchtext", "");
            // Check whether search text is defined
            if (!string.IsNullOrEmpty(searchText))
            {
                // Get current search mode from query string
                string         searchMode     = QueryHelper.GetString("searchmode", "");
                SearchModeEnum searchModeEnum = searchMode.ToEnum <SearchModeEnum>();

                // Check whether index info exists
                if (sii != null)
                {
                    // Keep search text in search textbox
                    //txtSearchFor.Text = searchText;
                    var condition = new SearchCondition(null, searchModeEnum, SearchOptionsEnum.FullSearch);

                    searchText = SearchSyntaxHelper.CombineSearchCondition(searchText, condition);

                    // Get positions and ranges for search method
                    int startPosition     = 0;
                    int numberOfProceeded = 100;
                    int displayResults    = 100;
                    if (pgrSearch.CurrentPageSize != 0 && pgrSearch.GroupSize != 0)
                    {
                        startPosition     = (pgrSearch.CurrentPage - 1) * pgrSearch.CurrentPageSize;
                        numberOfProceeded = (((pgrSearch.CurrentPage / pgrSearch.GroupSize) + 1) * pgrSearch.CurrentPageSize * pgrSearch.GroupSize) + pgrSearch.CurrentPageSize;
                        displayResults    = pgrSearch.CurrentPageSize;
                    }

                    // Prepare parameters
                    SearchParameters parameters = new SearchParameters()
                    {
                        SearchFor                 = searchText,
                        SearchSort                = null,
                        Path                      = null,
                        ClassNames                = null,
                        CurrentCulture            = "##ALL##",
                        DefaultCulture            = null,
                        CombineWithDefaultCulture = false,
                        CheckPermissions          = false,
                        SearchInAttachments       = false,
                        User                      = MembershipContext.AuthenticatedUser,
                        SearchIndexes             = sii.IndexName,
                        StartingPosition          = startPosition,
                        DisplayResults            = displayResults,
                        NumberOfProcessedResults  = numberOfProceeded,
                        NumberOfResults           = 0,
                        AttachmentWhere           = null,
                        AttachmentOrderBy         = null,
                    };

                    // Search
                    var results = SearchHelper.Search(parameters);

                    // Fill repeater with results
                    repSearchResults.DataSource = results.Items;
                    repSearchResults.PagerForceNumberOfResults = parameters.NumberOfResults;
                    repSearchResults.DataBind();

                    // Show now results found ?
                    if (parameters.NumberOfResults == 0)
                    {
                        lblNoResults.Text    = "<br />" + GetString("srch.results.noresults.preview");
                        lblNoResults.Visible = true;

                        Exception searchError = results.LastError;
                        if (searchError != null)
                        {
                            pnlError.Visible = true;
                            lblError.Text    = GetString("smartsearch.searcherror") + " " + searchError.Message;
                        }
                    }
                }
            }

            // Fill CMSDropDownList option with values
            ControlsHelper.FillListControlWithEnum <SearchModeEnum>(drpSearchMode, "srch.dialog", useStringRepresentation: true);
            drpSearchMode.SelectedValue = QueryHelper.GetString("searchmode", EnumHelper.GetDefaultValue <SearchModeEnum>().ToStringRepresentation());

            // Set up search text
            txtSearchFor.Text = QueryHelper.GetString("searchtext", "");
        }
    }
        public void TestMultipleSearchSameFieldSearchUserField(Enums.ResourceType resourceType, string condition, FieldType fieldType)
        {
            string fieldAlias = customFields.Data[$"{resourceType}-{fieldType}-0"].Field.ToAlias();

            SearchHelper.ReadFailMultipleSearch(resourceType, fieldAlias, fieldAlias, condition, fieldType);
        }
Example #28
0
        public override void Install(ModuleManager manager)
        {
            manager.CreateCommands("", cgb =>
            {
                cgb.AddCheck(PermissionChecker.Instance);

                var client = manager.Client;

                commands.ForEach(cmd => cmd.Init(cgb));

                cgb.CreateCommand(Prefix + "delmsgoncmd")
                .Description($"Toggles the automatic deletion of user's successful command message to prevent chat flood. **Server Manager Only.** | `{Prefix}delmsgoncmd`")
                .AddCheck(SimpleCheckers.ManageServer())
                .Do(async e =>
                {
                    var conf = SpecificConfigurations.Default.Of(e.Server.Id);
                    conf.AutoDeleteMessagesOnCommand = !conf.AutoDeleteMessagesOnCommand;
                    await Classes.JSONModels.ConfigHandler.SaveConfig().ConfigureAwait(false);
                    if (conf.AutoDeleteMessagesOnCommand)
                    {
                        await e.Channel.SendMessage("❗`Now automatically deleting successful command invokations.`");
                    }
                    else
                    {
                        await e.Channel.SendMessage("❗`Stopped automatic deletion of successful command invokations.`");
                    }
                });

                cgb.CreateCommand(Prefix + "restart")
                .Description($"Restarts the bot. Might not work. **Bot Owner Only** | `{Prefix}restart`")
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(async e =>
                {
                    await e.Channel.SendMessage("`Restarting in 2 seconds...`");
                    await Task.Delay(2000);
                    System.Diagnostics.Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location);
                    Environment.Exit(0);
                });

                cgb.CreateCommand(Prefix + "setrole").Alias(Prefix + "sr")
                .Description($"Sets a role for a given user. **Needs Manage Roles Permissions.**| `{Prefix}sr @User Guest`")
                .Parameter("user_name", ParameterType.Required)
                .Parameter("role_name", ParameterType.Unparsed)
                .AddCheck(SimpleCheckers.CanManageRoles)
                .Do(async e =>
                {
                    var userName = e.GetArg("user_name");
                    var roleName = e.GetArg("role_name");

                    if (string.IsNullOrWhiteSpace(roleName))
                    {
                        return;
                    }

                    if (!e.User.ServerPermissions.ManageRoles)
                    {
                        await e.Channel.SendMessage("You have insufficient permissions.").ConfigureAwait(false);
                    }

                    var usr = e.Server.FindUsers(userName).FirstOrDefault();
                    if (usr == null)
                    {
                        await e.Channel.SendMessage("You failed to supply a valid username").ConfigureAwait(false);
                        return;
                    }

                    var role = e.Server.FindRoles(roleName).FirstOrDefault();
                    if (role == null)
                    {
                        await e.Channel.SendMessage("You failed to supply a valid role").ConfigureAwait(false);
                        return;
                    }

                    try
                    {
                        await usr.AddRoles(role).ConfigureAwait(false);
                        await e.Channel.SendMessage($"Successfully added role **{role.Name}** to user **{usr.Name}**").ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage("Failed to add roles. Bot has insufficient permissions.\n").ConfigureAwait(false);
                        Console.WriteLine(ex.ToString());
                    }
                });

                cgb.CreateCommand(Prefix + "removerole").Alias(Prefix + "rr")
                .Description($"Removes a role from a given user. **Needs Manage Roles Permissions.**| `{Prefix}rr @User Admin`")
                .Parameter("user_name", ParameterType.Required)
                .Parameter("role_name", ParameterType.Unparsed)
                .AddCheck(SimpleCheckers.CanManageRoles)
                .Do(async e =>
                {
                    var userName = e.GetArg("user_name");
                    var roleName = e.GetArg("role_name");

                    if (string.IsNullOrWhiteSpace(roleName))
                    {
                        return;
                    }

                    var usr = e.Server.FindUsers(userName).FirstOrDefault();
                    if (usr == null)
                    {
                        await e.Channel.SendMessage("You failed to supply a valid username").ConfigureAwait(false);
                        return;
                    }

                    var role = e.Server.FindRoles(roleName).FirstOrDefault();
                    if (role == null)
                    {
                        await e.Channel.SendMessage("You failed to supply a valid role").ConfigureAwait(false);
                        return;
                    }

                    try
                    {
                        await usr.RemoveRoles(role).ConfigureAwait(false);
                        await e.Channel.SendMessage($"Successfully removed role **{role.Name}** from user **{usr.Name}**").ConfigureAwait(false);
                    }
                    catch
                    {
                        await e.Channel.SendMessage("Failed to remove roles. Most likely reason: Insufficient permissions.").ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "renamerole")
                .Alias(Prefix + "renr")
                .Description($"Renames a role. Roles you are renaming must be lower than bot's highest role. **Manage Roles Permissions.** | `{Prefix}renr \"First role\" SecondRole`")
                .Parameter("r1", ParameterType.Required)
                .Parameter("r2", ParameterType.Required)
                .AddCheck(new SimpleCheckers.ManageRoles())
                .Do(async e =>
                {
                    var r1 = e.GetArg("r1").Trim();
                    var r2 = e.GetArg("r2").Trim();

                    var roleToEdit = e.Server.FindRoles(r1).FirstOrDefault();
                    if (roleToEdit == null)
                    {
                        await e.Channel.SendMessage("Can't find that role.").ConfigureAwait(false);
                        return;
                    }

                    try
                    {
                        if (roleToEdit.Position > e.Server.CurrentUser.Roles.Max(r => r.Position))
                        {
                            await e.Channel.SendMessage("I can't edit roles higher than my highest role.").ConfigureAwait(false);
                            return;
                        }
                        await roleToEdit.Edit(r2);
                        await e.Channel.SendMessage("Role renamed.").ConfigureAwait(false);
                    }
                    catch (Exception)
                    {
                        await e.Channel.SendMessage("Failed to rename role. Probably insufficient permissions.").ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "removeallroles").Alias(Prefix + "rar")
                .Description($"Removes all roles from a mentioned user. **Needs Manage Roles Permissions.**| `{Prefix}rar @User`")
                .Parameter("user_name", ParameterType.Unparsed)
                .AddCheck(SimpleCheckers.CanManageRoles)
                .Do(async e =>
                {
                    var userName = e.GetArg("user_name");

                    var usr = e.Server.FindUsers(userName).FirstOrDefault();
                    if (usr == null)
                    {
                        await e.Channel.SendMessage("You failed to supply a valid username").ConfigureAwait(false);
                        return;
                    }

                    try
                    {
                        await usr.RemoveRoles(usr.Roles.ToArray()).ConfigureAwait(false);
                        await e.Channel.SendMessage($"Successfully removed **all** roles from user **{usr.Name}**").ConfigureAwait(false);
                    }
                    catch
                    {
                        await e.Channel.SendMessage("Failed to remove roles. Most likely reason: Insufficient permissions.").ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "createrole").Alias(Prefix + "cr")
                .Description($"Creates a role with a given name. **Needs Manage Roles Permissions.**| `{Prefix}cr Awesome Role`")
                .Parameter("role_name", ParameterType.Unparsed)
                .AddCheck(SimpleCheckers.CanManageRoles)
                .Do(async e =>
                {
                    if (string.IsNullOrWhiteSpace(e.GetArg("role_name")))
                    {
                        return;
                    }
                    try
                    {
                        var r = await e.Server.CreateRole(e.GetArg("role_name")).ConfigureAwait(false);
                        await e.Channel.SendMessage($"Successfully created role **{r.Name}**.").ConfigureAwait(false);
                    }
                    catch (Exception)
                    {
                        await e.Channel.SendMessage(":warning: Unspecified error.").ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "rolecolor").Alias(Prefix + "rc")
                .Parameter("role_name", ParameterType.Required)
                .Parameter("r", ParameterType.Optional)
                .Parameter("g", ParameterType.Optional)
                .Parameter("b", ParameterType.Optional)
                .Description($"Set a role's color to the hex or 0-255 rgb color value provided. **Needs Manage Roles Permissions.** | `{Prefix}rc Admin 255 200 100` or `{Prefix}rc Admin ffba55`")
                .Do(async e =>
                {
                    if (!e.User.ServerPermissions.ManageRoles)
                    {
                        await e.Channel.SendMessage("You don't have permission to use this!").ConfigureAwait(false);
                        return;
                    }

                    var args = e.Args.Where(s => s != string.Empty);

                    if (args.Count() != 2 && args.Count() != 4)
                    {
                        await e.Channel.SendMessage("The parameters are invalid.").ConfigureAwait(false);
                        return;
                    }

                    var role = e.Server.FindRoles(e.Args[0]).FirstOrDefault();

                    if (role == null)
                    {
                        await e.Channel.SendMessage("That role does not exist.").ConfigureAwait(false);
                        return;
                    }
                    try
                    {
                        var rgb  = args.Count() == 4;
                        var arg1 = e.Args[1].Replace("#", "");

                        var red   = Convert.ToByte(rgb ? int.Parse(arg1) : Convert.ToInt32(arg1.Substring(0, 2), 16));
                        var green = Convert.ToByte(rgb ? int.Parse(e.Args[2]) : Convert.ToInt32(arg1.Substring(2, 2), 16));
                        var blue  = Convert.ToByte(rgb ? int.Parse(e.Args[3]) : Convert.ToInt32(arg1.Substring(4, 2), 16));

                        await role.Edit(color: new Color(red, green, blue)).ConfigureAwait(false);
                        await e.Channel.SendMessage($"Role {role.Name}'s color has been changed.").ConfigureAwait(false);
                    }
                    catch (Exception)
                    {
                        await e.Channel.SendMessage("Error occured, most likely invalid parameters or insufficient permissions.").ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "ban").Alias(Prefix + "b")
                .Parameter("user", ParameterType.Required)
                .Parameter("msg", ParameterType.Unparsed)
                .Description($"Bans a user by id or name with an optional message. **Needs Ban Permissions.**| `{Prefix}b \"@some Guy\" Your behaviour is toxic.`")
                .Do(async e =>
                {
                    var msg  = e.GetArg("msg");
                    var user = e.GetArg("user");
                    if (e.User.ServerPermissions.BanMembers)
                    {
                        var usr = e.Server.FindUsers(user).FirstOrDefault();
                        if (usr == null)
                        {
                            await e.Channel.SendMessage("User not found.").ConfigureAwait(false);
                            return;
                        }
                        if (!string.IsNullOrWhiteSpace(msg))
                        {
                            await usr.SendMessage($"**You have been BANNED from `{e.Server.Name}` server.**\n" +
                                                  $"Reason: {msg}").ConfigureAwait(false);
                            await Task.Delay(2000).ConfigureAwait(false);         // temp solution; give time for a message to be send, fu volt
                        }
                        try
                        {
                            await e.Server.Ban(usr, 7).ConfigureAwait(false);

                            await e.Channel.SendMessage("Banned user " + usr.Name + " Id: " + usr.Id).ConfigureAwait(false);
                        }
                        catch
                        {
                            await e.Channel.SendMessage("Error. Most likely I don't have sufficient permissions.").ConfigureAwait(false);
                        }
                    }
                });

                cgb.CreateCommand(Prefix + "softban").Alias(Prefix + "sb")
                .Parameter("user", ParameterType.Required)
                .Parameter("msg", ParameterType.Unparsed)
                .Description($"Bans and then unbans a user by id or name with an optional message. **Needs Ban Permissions.**| `{Prefix}sb \"@some Guy\" Your behaviour is toxic.`")
                .Do(async e =>
                {
                    var msg  = e.GetArg("msg");
                    var user = e.GetArg("user");
                    if (e.User.ServerPermissions.BanMembers)
                    {
                        var usr = e.Server.FindUsers(user).FirstOrDefault();
                        if (usr == null)
                        {
                            await e.Channel.SendMessage("User not found.").ConfigureAwait(false);
                            return;
                        }
                        if (!string.IsNullOrWhiteSpace(msg))
                        {
                            await usr.SendMessage($"**You have been SOFT-BANNED from `{e.Server.Name}` server.**\n" +
                                                  $"Reason: {msg}").ConfigureAwait(false);
                            await Task.Delay(2000).ConfigureAwait(false);         // temp solution; give time for a message to be send, fu volt
                        }
                        try
                        {
                            await e.Server.Ban(usr, 7).ConfigureAwait(false);
                            await e.Server.Unban(usr).ConfigureAwait(false);

                            await e.Channel.SendMessage("Soft-Banned user " + usr.Name + " Id: " + usr.Id).ConfigureAwait(false);
                        }
                        catch
                        {
                            await e.Channel.SendMessage("Error. Most likely I don't have sufficient permissions.").ConfigureAwait(false);
                        }
                    }
                });

                cgb.CreateCommand(Prefix + "kick").Alias(Prefix + "k")
                .Parameter("user")
                .Parameter("msg", ParameterType.Unparsed)
                .Description($"Kicks a mentioned user. **Needs Kick Permissions.**| `{Prefix}k \"@some Guy\" Your behaviour is toxic.`")
                .Do(async e =>
                {
                    var msg  = e.GetArg("msg");
                    var user = e.GetArg("user");
                    if (e.User.ServerPermissions.KickMembers)
                    {
                        var usr = e.Server.FindUsers(user).FirstOrDefault();
                        if (usr == null)
                        {
                            await e.Channel.SendMessage("User not found.").ConfigureAwait(false);
                            return;
                        }
                        if (!string.IsNullOrWhiteSpace(msg))
                        {
                            await usr.SendMessage($"**You have been KICKED from `{e.Server.Name}` server.**\n" +
                                                  $"Reason: {msg}").ConfigureAwait(false);
                            await Task.Delay(2000).ConfigureAwait(false);     // temp solution; give time for a message to be send, fu volt
                        }
                        try
                        {
                            await usr.Kick().ConfigureAwait(false);
                            await e.Channel.SendMessage("Kicked user " + usr.Name + " Id: " + usr.Id).ConfigureAwait(false);
                        }
                        catch
                        {
                            await e.Channel.SendMessage("Error. Most likely I don't have sufficient permissions.").ConfigureAwait(false);
                        }
                    }
                });
                cgb.CreateCommand(Prefix + "mute")
                .Description($"Mutes mentioned user or users. **Needs Mute Permissions.**| `{Prefix}mute \"@Someguy\"` or `{Prefix}mute \"@Someguy\" \"@Someguy\"`")
                .Parameter("throwaway", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (!e.User.ServerPermissions.MuteMembers)
                    {
                        await e.Channel.SendMessage("I most likely don't have the permission necessary for that.").ConfigureAwait(false);
                        return;
                    }
                    if (!e.Message.MentionedUsers.Any())
                    {
                        return;
                    }
                    try
                    {
                        foreach (var u in e.Message.MentionedUsers)
                        {
                            await u.Edit(isMuted: true).ConfigureAwait(false);
                        }
                        await e.Channel.SendMessage("Mute successful").ConfigureAwait(false);
                    }
                    catch
                    {
                        await e.Channel.SendMessage("I most likely don't have the permission necessary for that.").ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "unmute")
                .Description($"Unmutes mentioned user or users. **Needs Mute Permissions.**| `{Prefix}unmute \"@Someguy\"` or `{Prefix}unmute \"@Someguy\" \"@Someguy\"`")
                .Parameter("throwaway", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (!e.User.ServerPermissions.MuteMembers)
                    {
                        await e.Channel.SendMessage("You do not have permission to do that.").ConfigureAwait(false);
                        return;
                    }
                    if (!e.Message.MentionedUsers.Any())
                    {
                        return;
                    }
                    try
                    {
                        foreach (var u in e.Message.MentionedUsers)
                        {
                            await u.Edit(isMuted: false).ConfigureAwait(false);
                        }
                        await e.Channel.SendMessage("Unmute successful").ConfigureAwait(false);
                    }
                    catch
                    {
                        await e.Channel.SendMessage("I most likely don't have the permission necessary for that.").ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "deafen")
                .Alias(Prefix + "deaf")
                .Description($"Deafens mentioned user or users. **Needs Deafen Permissions.**| `{Prefix}deaf \"@Someguy\"` or `{Prefix}deaf \"@Someguy\" \"@Someguy\"`")
                .Parameter("throwaway", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (!e.User.ServerPermissions.DeafenMembers)
                    {
                        await e.Channel.SendMessage("You do not have permission to do that.").ConfigureAwait(false);
                        return;
                    }
                    if (!e.Message.MentionedUsers.Any())
                    {
                        return;
                    }
                    try
                    {
                        foreach (var u in e.Message.MentionedUsers)
                        {
                            await u.Edit(isDeafened: true).ConfigureAwait(false);
                        }
                        await e.Channel.SendMessage("Deafen successful").ConfigureAwait(false);
                    }
                    catch
                    {
                        await e.Channel.SendMessage("I most likely don't have the permission necessary for that.").ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "undeafen")
                .Alias(Prefix + "undef")
                .Description($"Undeafens mentioned user or users. **Needs Deafen Permissions.** | `{Prefix}undef \"@Someguy\"` or `{Prefix}undef \"@Someguy\" \"@Someguy\"`")
                .Parameter("throwaway", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (!e.User.ServerPermissions.DeafenMembers)
                    {
                        await e.Channel.SendMessage("You do not have permission to do that.").ConfigureAwait(false);
                        return;
                    }
                    if (!e.Message.MentionedUsers.Any())
                    {
                        return;
                    }
                    try
                    {
                        foreach (var u in e.Message.MentionedUsers)
                        {
                            await u.Edit(isDeafened: false).ConfigureAwait(false);
                        }
                        await e.Channel.SendMessage("Undeafen successful").ConfigureAwait(false);
                    }
                    catch
                    {
                        await e.Channel.SendMessage("I most likely don't have the permission necessary for that.").ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "delvoichanl")
                .Alias(Prefix + "dvch")
                .Description($"Deletes a voice channel with a given name. **Needs Manage Channel Permissions.**| `{Prefix}dvch VoiceChannelName`")
                .Parameter("channel_name", ParameterType.Required)
                .Do(async e =>
                {
                    try
                    {
                        if (e.User.ServerPermissions.ManageChannels)
                        {
                            var ch = e.Server.FindChannels(e.GetArg("channel_name"), ChannelType.Voice).FirstOrDefault();
                            if (ch == null)
                            {
                                return;
                            }
                            await ch.Delete().ConfigureAwait(false);
                            await e.Channel.SendMessage($"Removed channel **{e.GetArg("channel_name")}**.").ConfigureAwait(false);
                        }
                    }
                    catch
                    {
                        await e.Channel.SendMessage("Insufficient permissions.");
                    }
                });

                cgb.CreateCommand(Prefix + "creatvoichanl")
                .Alias(Prefix + "cvch")
                .Description($"Creates a new voice channel with a given name. **Needs Manage Channel Permissions.** | `{Prefix}cvch VoiceChannelName`")
                .Parameter("channel_name", ParameterType.Required)
                .Do(async e =>
                {
                    try
                    {
                        if (e.User.ServerPermissions.ManageChannels)
                        {
                            await e.Server.CreateChannel(e.GetArg("channel_name"), ChannelType.Voice).ConfigureAwait(false);
                            await e.Channel.SendMessage($"Created voice channel **{e.GetArg("channel_name")}**.").ConfigureAwait(false);
                        }
                    }
                    catch
                    {
                        await e.Channel.SendMessage("Insufficient permissions.").ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "deltxtchanl")
                .Alias(Prefix + "dtch")
                .Description($"Deletes a text channel with a given name. **Needs Manage Channel Permissions.** | `{Prefix}dtch TextChannelName`")
                .Parameter("channel_name", ParameterType.Required)
                .Do(async e =>
                {
                    try
                    {
                        if (e.User.ServerPermissions.ManageChannels)
                        {
                            var channel = e.Server.FindChannels(e.GetArg("channel_name"), ChannelType.Text).FirstOrDefault();
                            if (channel == null)
                            {
                                return;
                            }
                            await channel.Delete().ConfigureAwait(false);
                            await e.Channel.SendMessage($"Removed text channel **{e.GetArg("channel_name")}**.").ConfigureAwait(false);
                        }
                    }
                    catch
                    {
                        await e.Channel.SendMessage("Insufficient permissions.").ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "creatxtchanl")
                .Alias(Prefix + "ctch")
                .Description($"Creates a new text channel with a given name. **Needs Manage Channel Permissions.** | `{Prefix}ctch TextChannelName`")
                .Parameter("channel_name", ParameterType.Required)
                .Do(async e =>
                {
                    try
                    {
                        if (e.User.ServerPermissions.ManageChannels)
                        {
                            await e.Server.CreateChannel(e.GetArg("channel_name"), ChannelType.Text).ConfigureAwait(false);
                            await e.Channel.SendMessage($"Added text channel **{e.GetArg("channel_name")}**.").ConfigureAwait(false);
                        }
                    }
                    catch
                    {
                        await e.Channel.SendMessage("Insufficient permissions.").ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "settopic")
                .Alias(Prefix + "st")
                .Description($"Sets a topic on the current channel. **Needs Manage Channel Permissions.** | `{Prefix}st My new topic`")
                .AddCheck(SimpleCheckers.ManageChannels())
                .Parameter("topic", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var topic = e.GetArg("topic")?.Trim() ?? "";
                    await e.Channel.Edit(topic: topic).ConfigureAwait(false);
                    await e.Channel.SendMessage(":ok: **New channel topic set.**").ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "setchanlname")
                .Alias(Prefix + "schn")
                .Description($"Changed the name of the current channel. **Needs Manage Channel Permissions.**| `{Prefix}schn NewName`")
                .AddCheck(SimpleCheckers.ManageChannels())
                .Parameter("name", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var name = e.GetArg("name");
                    if (string.IsNullOrWhiteSpace(name))
                    {
                        return;
                    }
                    await e.Channel.Edit(name: name).ConfigureAwait(false);
                    await e.Channel.SendMessage(":ok: **New channel name set.**").ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "heap")
                .Description($"Shows allocated memory - **Bot Owner Only!** | `{Prefix}heap`")
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(async e =>
                {
                    var heap = await Task.Run(() => WizStats.Instance.Heap()).ConfigureAwait(false);
                    await e.Channel.SendMessage($"`Heap Size:` {heap}").ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "prune")
                .Alias(Prefix + "clr")
                .Description(
                    "`.prune` removes all WizBot's messages in the last 100 messages.`.prune X` removes last X messages from the channel (up to 100)`.prune @Someone` removes all Someone's messages in the last 100 messages.`.prune @Someone X` removes last X 'Someone's' messages in the channel. **Needs Manage Messages Permissions**" +
                    $"| `{Prefix}prune` or `{Prefix}prune 5` or `{Prefix}prune @Someone` or `{Prefix}prune @Someone X`")
                .Parameter("user_or_num", ParameterType.Optional)
                .Parameter("num", ParameterType.Optional)
                .Do(async e =>
                {
                    if (string.IsNullOrWhiteSpace(e.GetArg("user_or_num")))     // if nothing is set, clear WizBot's messages, no permissions required
                    {
                        var msgs = (await e.Channel.DownloadMessages(100).ConfigureAwait(false)).Where(m => m.User?.Id == e.Server.CurrentUser.Id)?.ToArray();
                        if (msgs == null || !msgs.Any())
                        {
                            return;
                        }
                        var toDelete = msgs as Message[] ?? msgs.ToArray();
                        await e.Channel.DeleteMessages(toDelete).ConfigureAwait(false);
                        return;
                    }
                    if (!e.User.GetPermissions(e.Channel).ManageMessages)
                    {
                        return;
                    }
                    else if (!e.Server.CurrentUser.GetPermissions(e.Channel).ManageMessages)
                    {
                        await e.Channel.SendMessage("💢I don't have the permission to manage messages.");
                        return;
                    }
                    int val;
                    if (int.TryParse(e.GetArg("user_or_num"), out val))     // if num is set in the first argument,
                                                                            //delete that number of messages.
                    {
                        if (val <= 0)
                        {
                            return;
                        }
                        val++;
                        await e.Channel.DeleteMessages((await e.Channel.DownloadMessages(val).ConfigureAwait(false)).ToArray()).ConfigureAwait(false);
                        return;
                    }
                    //else if first argument is user
                    var usr = e.Server.FindUsers(e.GetArg("user_or_num")).FirstOrDefault();
                    if (usr == null)
                    {
                        return;
                    }
                    val = 100;
                    if (!int.TryParse(e.GetArg("num"), out val))
                    {
                        val = 100;
                    }
                    var mesgs = (await e.Channel.DownloadMessages(100).ConfigureAwait(false)).Where(m => m.User?.Id == usr.Id).Take(val);
                    if (mesgs == null || !mesgs.Any())
                    {
                        return;
                    }
                    await e.Channel.DeleteMessages(mesgs as Message[] ?? mesgs.ToArray()).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "die")
                .Description($"Shuts the bot down and notifies users about the restart. **Bot Owner Only!** | `{Prefix}die`")
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(async e =>
                {
                    await e.Channel.SendMessage("`Shutting down.`").ConfigureAwait(false);
                    await Task.Delay(2000).ConfigureAwait(false);
                    Environment.Exit(0);
                });

                cgb.CreateCommand(Prefix + "setname")
                .Alias(Prefix + "newnm")
                .Description($"Give the bot a new name. **Bot Owner Only!** | `{Prefix}newnm BotName`")
                .Parameter("new_name", ParameterType.Unparsed)
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(async e =>
                {
                    if (e.GetArg("new_name") == null)
                    {
                        return;
                    }

                    await client.CurrentUser.Edit("", e.GetArg("new_name")).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "newavatar")
                .Alias(Prefix + "setavatar")
                .Description($"Sets a new avatar image for the WizBot. Argument is a direct link to an image. **Bot Owner Only!** | `{Prefix}setavatar http://i.imgur.com/xTG3a1I.jpg`")
                .Parameter("img", ParameterType.Unparsed)
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(async e =>
                {
                    if (string.IsNullOrWhiteSpace(e.GetArg("img")))
                    {
                        return;
                    }
                    // Gather user provided URL.
                    var avatarAddress = e.GetArg("img");
                    var imageStream   = await SearchHelper.GetResponseStreamAsync(avatarAddress).ConfigureAwait(false);
                    var image         = System.Drawing.Image.FromStream(imageStream);
                    await client.CurrentUser.Edit("", avatar: image.ToStream()).ConfigureAwait(false);

                    // Send confirm.
                    await e.Channel.SendMessage("New avatar set.").ConfigureAwait(false);

                    // Save the image to disk.
                    image.Save("data/avatar.png", System.Drawing.Imaging.ImageFormat.Png);
                });

                cgb.CreateCommand(Prefix + "setgame")
                .Description($"Sets the bots game. **Bot Owner Only!** | `{Prefix}setgame Playing with Wizkiller96`")
                .Parameter("set_game", ParameterType.Unparsed)
                .Do(e =>
                {
                    if (!WizBot.IsOwner(e.User.Id) || e.GetArg("set_game") == null)
                    {
                        return;
                    }

                    client.SetGame(e.GetArg("set_game"));
                });

                cgb.CreateCommand(Prefix + "send")
                .Description($"Send a message to someone on a different server through the bot. **Bot Owner Only!** | `{Prefix}send sid|u:uid Hello user!` or `{Prefix}send sid|c:cid Message to channel!` (cid = channel id, sid = server id)")
                .Parameter("ids", ParameterType.Required)
                .Parameter("msg", ParameterType.Unparsed)
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(async e =>
                {
                    var msg = e.GetArg("msg")?.Trim();

                    if (string.IsNullOrWhiteSpace(msg))
                    {
                        return;
                    }

                    var ids = e.GetArg("ids").Split('|');
                    if (ids.Length != 2)
                    {
                        return;
                    }
                    var sid    = ulong.Parse(ids[0]);
                    var server = WizBot.Client.Servers.Where(s => s.Id == sid).FirstOrDefault();

                    if (server == null)
                    {
                        return;
                    }

                    if (ids[1].ToUpperInvariant().StartsWith("C:"))
                    {
                        var cid     = ulong.Parse(ids[1].Substring(2));
                        var channel = server.TextChannels.Where(c => c.Id == cid).FirstOrDefault();
                        if (channel == null)
                        {
                            return;
                        }
                        await channel.SendMessage(msg);
                    }
                    else if (ids[1].ToUpperInvariant().StartsWith("U:"))
                    {
                        var uid  = ulong.Parse(ids[1].Substring(2));
                        var user = server.Users.Where(u => u.Id == uid).FirstOrDefault();
                        if (user == null)
                        {
                            return;
                        }
                        await user.SendMessage(msg);
                    }
                    else
                    {
                        await e.Channel.SendMessage("`Invalid format.`");
                    }
                });

                cgb.CreateCommand(Prefix + "mentionrole")
                .Alias(Prefix + "menro")
                .Description($"Mentions every person from the provided role or roles (separated by a ',') on this server. Requires you to have mention everyone permission. | `{Prefix}menro RoleName`")
                .Parameter("roles", ParameterType.Unparsed)
                .Do(async e =>
                {
                    await Task.Run(async() =>
                    {
                        if (!e.User.ServerPermissions.MentionEveryone)
                        {
                            return;
                        }
                        var arg     = e.GetArg("roles").Split(',').Select(r => r.Trim());
                        string send = $"--{e.User.Mention} has invoked a mention on the following roles--";
                        foreach (var roleStr in arg.Where(str => !string.IsNullOrWhiteSpace(str)))
                        {
                            var role = e.Server.FindRoles(roleStr).FirstOrDefault();
                            if (role == null)
                            {
                                continue;
                            }
                            send += $"\n`{role.Name}`\n";
                            send += string.Join(", ", role.Members.Select(r => r.Mention));
                        }

                        while (send.Length > 2000)
                        {
                            var curstr = send.Substring(0, 2000);
                            await
                            e.Channel.Send(curstr.Substring(0,
                                                            curstr.LastIndexOf(", ", StringComparison.Ordinal) + 1)).ConfigureAwait(false);
                            send = curstr.Substring(curstr.LastIndexOf(", ", StringComparison.Ordinal) + 1) +
                                   send.Substring(2000);
                        }
                        await e.Channel.Send(send).ConfigureAwait(false);
                    }).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "unstuck")
                .Description($"Clears the message queue. **Bot Owner Only!** | `{Prefix}unstuck`")
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(e =>
                {
                    WizBot.Client.MessageQueue.Clear();
                });

                cgb.CreateCommand(Prefix + "donators")
                .Description($"List of lovely people who donated to keep this project alive. | `{Prefix}donators`")
                .Do(async e =>
                {
                    await Task.Run(async() =>
                    {
                        var rows            = DbHandler.Instance.GetAllRows <Donator>();
                        var donatorsOrdered = rows.OrderByDescending(d => d.Amount);
                        string str          = $"**Thanks to the people listed below for making this project happen!**\n";

                        await e.Channel.SendMessage(str + string.Join("⭐", donatorsOrdered.Select(d => d.UserName))).ConfigureAwait(false);
                    }).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "donadd")
                .Description($"Add a donator to the database. **Wizkiller96 Only** | `{Prefix}donadd Donate Amount`")
                .Parameter("donator")
                .Parameter("amount")
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(async e =>
                {
                    await Task.Run(() =>
                    {
                        var donator = e.Server.FindUsers(e.GetArg("donator")).FirstOrDefault();
                        var amount  = int.Parse(e.GetArg("amount"));
                        if (donator == null)
                        {
                            return;
                        }
                        try
                        {
                            DbHandler.Instance.Connection.Insert(new Donator
                            {
                                Amount   = amount,
                                UserName = donator.Name,
                                UserId   = (long)donator.Id
                            });
                            e.Channel.SendMessage("Successfuly added a new donator. 👑").ConfigureAwait(false);
                        }
                        catch { }
                    }).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "announce")
                .Description($"Sends a message to all servers' general channel bot is connected to.**Bot Owner Only!** | `{Prefix}announce Useless spam`")
                .Parameter("msg", ParameterType.Unparsed)
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(async e =>
                {
                    foreach (var ch in WizBot.Client.Servers.Select(s => s.DefaultChannel))
                    {
                        await ch.SendMessage(e.GetArg("msg")).ConfigureAwait(false);
                    }

                    await e.Channel.SendMessage(":ok:").ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "updates")
                .Alias(Prefix + "unotes")
                .Description("Shows updates that have been done to WizBot.")
                .Do(async e =>
                {
                    await e.Channel.SendMessage(" **WizBot Update Notes**\n\n<http://wizkiller96network.com/wizbot/updates.html>").ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "savechat")
                .Description($"Saves a number of messages to a text file and sends it to you. **Bot Owner Only** | `{Prefix}savechat 150`")
                .Parameter("cnt", ParameterType.Required)
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(async e =>
                {
                    var cntstr = e.GetArg("cnt")?.Trim();
                    int cnt;
                    if (!int.TryParse(cntstr, out cnt))
                    {
                        return;
                    }
                    ulong?lastmsgId = null;
                    var sb          = new StringBuilder();
                    var msgs        = new List <Message>(cnt);
                    while (cnt > 0)
                    {
                        var dlcnt = cnt < 100 ? cnt : 100;

                        var dledMsgs = await e.Channel.DownloadMessages(dlcnt, lastmsgId);
                        if (!dledMsgs.Any())
                        {
                            break;
                        }
                        msgs.AddRange(dledMsgs);
                        lastmsgId = msgs[msgs.Count - 1].Id;
                        cnt      -= 100;
                    }
                    await e.User.SendFile($"Chatlog-{e.Server.Name}/#{e.Channel.Name}-{DateTime.Now}.txt", JsonConvert.SerializeObject(new { Messages = msgs.Select(s => s.ToString()) }, Formatting.Indented).ToStream()).ConfigureAwait(false);
                });
            });
        }
 private bool IsComparisonCorrect <T>(T source, SearchComparison <T> comparison) where T : IComparable
 {
     return(SearchHelper.ConvertComparison(comparison).Invoke(source));
 }
        public override void Install(ModuleManager manager)
        {
            manager.CreateCommands("", cgb =>
            {
                cgb.AddCheck(PermissionChecker.Instance);

                commands.ForEach(cmd => cmd.Init(cgb));

                cgb.CreateCommand(Prefix + "we")
                .Description($"Shows weather data for a specified city and a country. BOTH ARE REQUIRED. Use country abbrevations. | `{Prefix}we Moscow RF`")
                .Parameter("city", ParameterType.Required)
                .Parameter("country", ParameterType.Required)
                .Do(async e =>
                {
                    var city     = e.GetArg("city").Replace(" ", "");
                    var country  = e.GetArg("country").Replace(" ", "");
                    var response = await SearchHelper.GetResponseStringAsync($"http://api.lawlypopzz.xyz/nadekobot/weather/?city={city}&country={country}").ConfigureAwait(false);

                    var obj = JObject.Parse(response)["weather"];

                    await e.Channel.SendMessage(
                        $@"🌍 **Weather for** 【{obj["target"]}】
📏 **Lat,Long:** ({obj["latitude"]}, {obj["longitude"]}) ☁ **Condition:** {obj["condition"]}
😓 **Humidity:** {obj["humidity"]}% 💨 **Wind Speed:** {obj["windspeedk"]}km/h / {obj["windspeedm"]}mph 
🔆 **Temperature:** {obj["centigrade"]}°C / {obj["fahrenheit"]}°F 🔆 **Feels like:** {obj["feelscentigrade"]}°C / {obj["feelsfahrenheit"]}°F
🌄 **Sunrise:** {obj["sunrise"]} 🌇 **Sunset:** {obj["sunset"]}").ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "yt")
                .Parameter("query", ParameterType.Unparsed)
                .Description($"Searches youtubes and shows the first result | `{Prefix}yt query`")
                .Do(async e =>
                {
                    if (!(await SearchHelper.ValidateQuery(e.Channel, e.GetArg("query")).ConfigureAwait(false)))
                    {
                        return;
                    }
                    var link = await SearchHelper.FindYoutubeUrlByKeywords(e.GetArg("query")).ConfigureAwait(false);
                    if (string.IsNullOrWhiteSpace(link))
                    {
                        await e.Channel.SendMessage("No results found for that query.");
                        return;
                    }
                    var shortUrl = await SearchHelper.ShortenUrl(link).ConfigureAwait(false);
                    await e.Channel.SendMessage(shortUrl).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "ani")
                .Alias(Prefix + "anime", Prefix + "aq")
                .Parameter("query", ParameterType.Unparsed)
                .Description($"Queries anilist for an anime and shows the first result. | `{Prefix}aq aquarion evol`")
                .Do(async e =>
                {
                    if (!(await SearchHelper.ValidateQuery(e.Channel, e.GetArg("query")).ConfigureAwait(false)))
                    {
                        return;
                    }
                    string result;
                    try
                    {
                        result = (await SearchHelper.GetAnimeData(e.GetArg("query")).ConfigureAwait(false)).ToString();
                    }
                    catch
                    {
                        await e.Channel.SendMessage("Failed to find that anime.").ConfigureAwait(false);
                        return;
                    }

                    await e.Channel.SendMessage(result.ToString()).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "imdb")
                .Parameter("query", ParameterType.Unparsed)
                .Description($"Queries imdb for movies or series, show first result. | `{Prefix}imdb Batman vs Superman`")
                .Do(async e =>
                {
                    if (!(await SearchHelper.ValidateQuery(e.Channel, e.GetArg("query")).ConfigureAwait(false)))
                    {
                        return;
                    }
                    await e.Channel.SendIsTyping().ConfigureAwait(false);
                    string result;
                    try
                    {
                        var movie = ImdbScraper.ImdbScrape(e.GetArg("query"), true);
                        if (movie.Status)
                        {
                            result = movie.ToString();
                        }
                        else
                        {
                            result = "Failed to find that movie.";
                        }
                    }
                    catch
                    {
                        await e.Channel.SendMessage("Failed to find that movie.").ConfigureAwait(false);
                        return;
                    }

                    await e.Channel.SendMessage(result.ToString()).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "mang")
                .Alias(Prefix + "manga").Alias(Prefix + "mq")
                .Parameter("query", ParameterType.Unparsed)
                .Description($"Queries anilist for a manga and shows the first result. | `{Prefix}mq Shingeki no kyojin`")
                .Do(async e =>
                {
                    if (!(await SearchHelper.ValidateQuery(e.Channel, e.GetArg("query")).ConfigureAwait(false)))
                    {
                        return;
                    }
                    string result;
                    try
                    {
                        result = (await SearchHelper.GetMangaData(e.GetArg("query")).ConfigureAwait(false)).ToString();
                    }
                    catch
                    {
                        await e.Channel.SendMessage("Failed to find that anime.").ConfigureAwait(false);
                        return;
                    }
                    await e.Channel.SendMessage(result).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "randomcat")
                .Alias(Prefix + "meow")
                .Description($"Shows a random cat image. | `{Prefix}meow`")
                .Do(async e =>
                {
                    await e.Channel.SendMessage(JObject.Parse(
                                                    await SearchHelper.GetResponseStringAsync("http://www.random.cat/meow").ConfigureAwait(false))["file"].ToString())
                    .ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "randomdog")
                .Alias(Prefix + "woof")
                .Description($"Shows a random dog image. | `{Prefix}woof`")
                .Do(async e =>
                {
                    await e.Channel.SendMessage("http://random.dog/" + await SearchHelper.GetResponseStringAsync("http://random.dog/woof").ConfigureAwait(false)).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "i")
                .Description($"Pulls the first image found using a search parameter. Use ~ir for different results. | `{Prefix}i cute kitten`")
                .Parameter("query", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (string.IsNullOrWhiteSpace(e.GetArg("query")))
                    {
                        return;
                    }
                    try
                    {
                        var reqString = $"https://www.googleapis.com/customsearch/v1?q={Uri.EscapeDataString(e.GetArg("query"))}&cx=018084019232060951019%3Ahs5piey28-e&num=1&searchType=image&fields=items%2Flink&key={NadekoBot.Creds.GoogleAPIKey}";
                        var obj       = JObject.Parse(await SearchHelper.GetResponseStringAsync(reqString).ConfigureAwait(false));
                        await e.Channel.SendMessage(obj["items"][0]["link"].ToString()).ConfigureAwait(false);
                    }
                    catch (HttpRequestException exception)
                    {
                        if (exception.Message.Contains("403 (Forbidden)"))
                        {
                            await e.Channel.SendMessage("Daily limit reached!");
                        }
                        else
                        {
                            await e.Channel.SendMessage("Something went wrong.");
                        }
                    }
                });

                cgb.CreateCommand(Prefix + "ir")
                .Description($"Pulls a random image using a search parameter. | `{Prefix}ir cute kitten`")
                .Parameter("query", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (string.IsNullOrWhiteSpace(e.GetArg("query")))
                    {
                        return;
                    }
                    try
                    {
                        var reqString = $"https://www.googleapis.com/customsearch/v1?q={Uri.EscapeDataString(e.GetArg("query"))}&cx=018084019232060951019%3Ahs5piey28-e&num=1&searchType=image&start={ rng.Next(1, 50) }&fields=items%2Flink&key={NadekoBot.Creds.GoogleAPIKey}";
                        var obj       = JObject.Parse(await SearchHelper.GetResponseStringAsync(reqString).ConfigureAwait(false));
                        var items     = obj["items"] as JArray;
                        await e.Channel.SendMessage(items[0]["link"].ToString()).ConfigureAwait(false);
                    }
                    catch (HttpRequestException exception)
                    {
                        if (exception.Message.Contains("403 (Forbidden)"))
                        {
                            await e.Channel.SendMessage("Daily limit reached!");
                        }
                        else
                        {
                            await e.Channel.SendMessage("Something went wrong.");
                        }
                    }
                });

                cgb.CreateCommand(Prefix + "lmgtfy")
                .Description($"Google something for an idiot. | `{Prefix}lmgtfy query`")
                .Parameter("ffs", ParameterType.Unparsed)
                .Do(async e =>
                {
                    if (e.GetArg("ffs") == null || e.GetArg("ffs").Length < 1)
                    {
                        return;
                    }
                    await e.Channel.SendMessage(await $"http://lmgtfy.com/?q={ Uri.EscapeUriString(e.GetArg("ffs").ToString()) }".ShortenUrl())
                    .ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "google")
                .Alias(Prefix + "g")
                .Description($"Get a google search link for some terms. | `{Prefix}google query`")
                .Parameter("terms", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var terms = e.GetArg("terms")?.Trim();
                    if (string.IsNullOrWhiteSpace(terms))
                    {
                        return;
                    }
                    await e.Channel.SendMessage($"https://google.com/search?q={ HttpUtility.UrlEncode(terms).Replace(' ', '+') }")
                    .ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "hs")
                .Description($"Searches for a Hearthstone card and shows its image. Takes a while to complete. | `{Prefix}hs Ysera`")
                .Parameter("name", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var arg = e.GetArg("name");
                    if (string.IsNullOrWhiteSpace(arg))
                    {
                        await e.Channel.SendMessage("💢 Please enter a card name to search for.").ConfigureAwait(false);
                        return;
                    }
                    await e.Channel.SendIsTyping().ConfigureAwait(false);
                    var headers = new Dictionary <string, string> {
                        { "X-Mashape-Key", NadekoBot.Creds.MashapeKey }
                    };
                    var res = await SearchHelper.GetResponseStringAsync($"https://omgvamp-hearthstone-v1.p.mashape.com/cards/search/{Uri.EscapeUriString(arg)}", headers)
                              .ConfigureAwait(false);
                    try
                    {
                        var items  = JArray.Parse(res);
                        var images = new List <Image>();
                        if (items == null)
                        {
                            throw new KeyNotFoundException("Cannot find a card by that name");
                        }
                        var cnt = 0;
                        items.Shuffle();
                        foreach (var item in items.TakeWhile(item => cnt++ < 4).Where(item => item.HasValues && item["img"] != null))
                        {
                            images.Add(
                                Image.FromStream(await SearchHelper.GetResponseStreamAsync(item["img"].ToString()).ConfigureAwait(false)));
                        }
                        if (items.Count > 4)
                        {
                            await e.Channel.SendMessage("⚠ Found over 4 images. Showing random 4.").ConfigureAwait(false);
                        }
                        await e.Channel.SendFile(arg + ".png", (await images.MergeAsync()).ToStream(System.Drawing.Imaging.ImageFormat.Png))
                        .ConfigureAwait(false);
                    }
                    catch (Exception ex)
                    {
                        await e.Channel.SendMessage($"💢 Error {ex.Message}").ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "yoda")
                .Description($"Transforms your sentence to Yoda | `{Prefix}yoda I am Lisiano`")
                .Parameter("query", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var arg = e.GetArg("query");
                    if (string.IsNullOrWhiteSpace(arg))
                    {
                        await e.Channel.SendMessage("💢 Please enter a sentence.").ConfigureAwait(false);
                        return;
                    }
                    await e.Channel.SendIsTyping().ConfigureAwait(false);
                    var headers = new Dictionary <string, string> {
                        { "X-Mashape-Key", NadekoBot.Creds.MashapeKey }, { "Accept", "text/plain" }
                    };
                    var res = await SearchHelper.GetResponseStringAsync($"https://yoda.p.mashape.com/yoda?sentence={Uri.EscapeUriString(arg)}", headers).ConfigureAwait(false);
                    try
                    {
                        await e.Channel.SendMessage("`" + e.User.Name.ToString() + "`: ```" + res.ToString() + "```");
                    }
                    catch
                    {
                        await e.Channel.SendMessage("💢 Failed yoda-ing your sentence. Maybe next Yoda.").ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "ud")
                .Description($"Searches Urban Dictionary for a word. | `{Prefix}ud Pineapple`")
                .Parameter("query", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var arg = e.GetArg("query");
                    if (string.IsNullOrWhiteSpace(arg))
                    {
                        await e.Channel.SendMessage("💢 Please enter a search term.").ConfigureAwait(false);
                        return;
                    }
                    await e.Channel.SendIsTyping().ConfigureAwait(false);
                    var headers = new Dictionary <string, string> {
                        { "Accept", "application/json" }
                    };
                    var res = await SearchHelper.GetResponseStringAsync($"http://api.urbandictionary.com/v0/define?term={Uri.EscapeUriString(arg)}", headers).ConfigureAwait(false);
                    try
                    {
                        var items = JObject.Parse(res);
                        var sb    = new System.Text.StringBuilder();
                        sb.AppendLine($"`Term:` {items["list"][0]["word"].ToString()}");
                        sb.AppendLine($"`Definition:` {items["list"][0]["definition"].ToString()}");
                        sb.Append($"`Link:` <{await items["list"][0]["permalink"].ToString().ShortenUrl().ConfigureAwait(false)}>");
                        await e.Channel.SendMessage(sb.ToString());
                    }
                    catch
                    {
                        await e.Channel.SendMessage("💢 Failed finding a definition for that term.").ConfigureAwait(false);
                    }
                });
                // thanks to Blaubeerwald
                cgb.CreateCommand(Prefix + "#")
                .Description($"Searches Tagdef.com for a hashtag. | `{Prefix}# ff`")
                .Parameter("query", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var arg = e.GetArg("query");
                    if (string.IsNullOrWhiteSpace(arg))
                    {
                        await e.Channel.SendMessage("💢 Please enter a search term.").ConfigureAwait(false);
                        return;
                    }
                    await e.Channel.SendIsTyping().ConfigureAwait(false);
                    var headers = new Dictionary <string, string> {
                        { "X-Mashape-Key", NadekoBot.Creds.MashapeKey }
                    };
                    var res = await SearchHelper.GetResponseStringAsync($"https://tagdef.p.mashape.com/one.{Uri.EscapeUriString(arg)}.json", headers).ConfigureAwait(false);
                    try
                    {
                        var items = JObject.Parse(res);
                        var sb    = new System.Text.StringBuilder();
                        sb.AppendLine($"`Hashtag:` {items["defs"]["def"]["hashtag"].ToString()}");
                        sb.AppendLine($"`Definition:` {items["defs"]["def"]["text"].ToString()}");
                        sb.Append($"`Link:` <{await items["defs"]["def"]["uri"].ToString().ShortenUrl().ConfigureAwait(false)}>");
                        await e.Channel.SendMessage(sb.ToString());
                    }
                    catch
                    {
                        await e.Channel.SendMessage("💢 Failed finidng a definition for that tag.").ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "quote")
                .Description($"Shows a random quote. | `{Prefix}quote`")
                .Do(async e =>
                {
                    var quote = NadekoBot.Config.Quotes[rng.Next(0, NadekoBot.Config.Quotes.Count)].ToString();
                    await e.Channel.SendMessage(quote).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "catfact")
                .Description($"Shows a random catfact from <http://catfacts-api.appspot.com/api/facts> | `{Prefix}catfact`")
                .Do(async e =>
                {
                    var response = await SearchHelper.GetResponseStringAsync("http://catfacts-api.appspot.com/api/facts").ConfigureAwait(false);
                    if (response == null)
                    {
                        return;
                    }
                    await e.Channel.SendMessage($"🐈 `{JObject.Parse(response)["facts"][0].ToString()}`").ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "yomama")
                .Alias(Prefix + "ym")
                .Description($"Shows a random joke from <http://api.yomomma.info/> | `{Prefix}ym`")
                .Do(async e =>
                {
                    var response = await SearchHelper.GetResponseStringAsync("http://api.yomomma.info/").ConfigureAwait(false);
                    await e.Channel.SendMessage("`" + JObject.Parse(response)["joke"].ToString() + "` 😆").ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "randjoke")
                .Alias(Prefix + "rj")
                .Description($"Shows a random joke from <http://tambal.azurewebsites.net/joke/random> | `{Prefix}rj`")
                .Do(async e =>
                {
                    var response = await SearchHelper.GetResponseStringAsync("http://tambal.azurewebsites.net/joke/random").ConfigureAwait(false);
                    await e.Channel.SendMessage("`" + JObject.Parse(response)["joke"].ToString() + "` 😆").ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "chucknorris")
                .Alias(Prefix + "cn")
                .Description($"Shows a random chucknorris joke from <http://tambal.azurewebsites.net/joke/random> | `{Prefix}cn`")
                .Do(async e =>
                {
                    var response = await SearchHelper.GetResponseStringAsync("http://api.icndb.com/jokes/random/").ConfigureAwait(false);
                    await e.Channel.SendMessage("`" + JObject.Parse(response)["value"]["joke"].ToString() + "` 😆").ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "magicitem")
                .Alias(Prefix + "mi")
                .Description($"Shows a random magicitem from <https://1d4chan.org/wiki/List_of_/tg/%27s_magic_items> | `{Prefix}mi`")
                .Do(async e =>
                {
                    var magicItems = JsonConvert.DeserializeObject <List <MagicItem> >(File.ReadAllText("data/magicitems.json"));
                    var item       = magicItems[rng.Next(0, magicItems.Count)].ToString();

                    await e.Channel.SendMessage(item).ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "revav")
                .Description($"Returns a google reverse image search for someone's avatar. | `{Prefix}revav \"@SomeGuy\"`")
                .Parameter("user", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var usrStr = e.GetArg("user")?.Trim();

                    if (string.IsNullOrWhiteSpace(usrStr))
                    {
                        return;
                    }

                    var usr = e.Server.FindUsers(usrStr).FirstOrDefault();

                    if (usr == null || string.IsNullOrWhiteSpace(usr.AvatarUrl))
                    {
                        return;
                    }
                    await e.Channel.SendMessage($"https://images.google.com/searchbyimage?image_url={usr.AvatarUrl}").ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "revimg")
                .Description($"Returns a google reverse image search for an image from a link. | `{Prefix}revav Image link`")
                .Parameter("image", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var imgLink = e.GetArg("image")?.Trim();

                    if (string.IsNullOrWhiteSpace(imgLink))
                    {
                        return;
                    }
                    await e.Channel.SendMessage($"https://images.google.com/searchbyimage?image_url={imgLink}").ConfigureAwait(false);
                });

                cgb.CreateCommand(Prefix + "safebooru")
                .Description($"Shows a random image from safebooru with a given tag. Tag is optional but preffered. (multiple tags are appended with +) | `{Prefix}safebooru yuri+kissing`")
                .Parameter("tag", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var tag  = e.GetArg("tag")?.Trim() ?? "";
                    var link = await SearchHelper.GetSafebooruImageLink(tag).ConfigureAwait(false);
                    if (link == null)
                    {
                        await e.Channel.SendMessage("`No results.`");
                    }
                    else
                    {
                        await e.Channel.SendMessage(link).ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand(Prefix + "wiki")
                .Description($"Gives you back a wikipedia link | `{Prefix}wiki query`")
                .Parameter("query", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var query  = e.GetArg("query");
                    var result = await SearchHelper.GetResponseStringAsync("https://en.wikipedia.org//w/api.php?action=query&format=json&prop=info&redirects=1&formatversion=2&inprop=url&titles=" + Uri.EscapeDataString(query));
                    var data   = JsonConvert.DeserializeObject <WikipediaApiModel>(result);
                    if (data.Query.Pages[0].Missing)
                    {
                        await e.Channel.SendMessage("`That page could not be found.`");
                    }
                    else
                    {
                        await e.Channel.SendMessage(data.Query.Pages[0].FullUrl);
                    }
                });

                cgb.CreateCommand(Prefix + "clr")
                .Description($"Shows you what color corresponds to that hex. | `{Prefix}clr 00ff00`")
                .Parameter("color", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var arg1 = e.GetArg("color")?.Trim()?.Replace("#", "");
                    if (string.IsNullOrWhiteSpace(arg1))
                    {
                        return;
                    }
                    var img = new Bitmap(50, 50);

                    var red   = Convert.ToInt32(arg1.Substring(0, 2), 16);
                    var green = Convert.ToInt32(arg1.Substring(2, 2), 16);
                    var blue  = Convert.ToInt32(arg1.Substring(4, 2), 16);
                    var brush = new SolidBrush(System.Drawing.Color.FromArgb(red, green, blue));

                    using (Graphics g = Graphics.FromImage(img))
                    {
                        g.FillRectangle(brush, 0, 0, 50, 50);
                        g.Flush();
                    }

                    await e.Channel.SendFile("arg1.png", img.ToStream());
                });


                cgb.CreateCommand(Prefix + "videocall")
                .Description($"Creates a private <http://www.appear.in> video call link for you and other mentioned people. The link is sent to mentioned people via a private message. | `{Prefix}videocall \"@SomeGuy\"`")
                .Parameter("arg", ParameterType.Unparsed)
                .Do(async e =>
                {
                    try
                    {
                        var allUsrs      = e.Message.MentionedUsers.Union(new User[] { e.User });
                        var allUsrsArray = allUsrs as User[] ?? allUsrs.ToArray();
                        var str          = allUsrsArray.Aggregate("http://appear.in/", (current, usr) => current + Uri.EscapeUriString(usr.Name[0].ToString()));
                        str += new Random().Next();
                        foreach (var usr in allUsrsArray)
                        {
                            await usr.SendMessage(str).ConfigureAwait(false);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex);
                    }
                });

                cgb.CreateCommand(Prefix + "av")
                .Alias(Prefix + "avatar")
                .Parameter("mention", ParameterType.Required)
                .Description($"Shows a mentioned person's avatar. | `{Prefix}av \"@SomeGuy\"`")
                .Do(async e =>
                {
                    var usr = e.Channel.FindUsers(e.GetArg("mention")).FirstOrDefault();
                    if (usr == null)
                    {
                        await e.Channel.SendMessage("Invalid user specified.").ConfigureAwait(false);
                        return;
                    }
                    await e.Channel.SendMessage(await usr.AvatarUrl.ShortenUrl()).ConfigureAwait(false);
                });
            });
        }
Example #31
0
        /// <summary>
        /// Handles the Click event of the Search control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="T:System.EventArgs"/> instance containing the event data.</param>
        private void Search_Click(object sender, EventArgs e)
        {
            try
            {
                Guid userID = Guid.Empty;
                if (testUserID != Guid.Empty)
                {
                    userID = testUserID;
                }
                else
                {
                    UsersDB u = new UsersDB();
                    System.Web.Security.MembershipUser s = u.GetSingleUser(PortalSettings.CurrentUser.Identity.Email);
                    try
                    {
                        userID = (Guid)s.ProviderUserKey;
                    }
                    finally
                    {
                        //    s.Close(); //by Manu, fixed bug 807858
                    }
                }

                //Get topic
                string topicName = ddTopics.SelectedItem.Value;
                //All = no filter
                if (topicName == General.GetString("PORTALSEARCH_ALL", "All", null))
                {
                    topicName = string.Empty;
                }

                if (txtSearchString.Text.Length <= 2)
                {
                    throw new Exception(
                              General.GetString("PORTALSEARCH_TONARROW", "Search string to narrow to be searched", null));
                }

                SqlDataReader r =
                    SearchHelper.SearchPortal(PortalID, userID, ddSearchModule.SelectedItem.Value, txtSearchString.Text,
                                              ddSearchField.SelectedItem.Value, sortOrder, string.Empty, topicName,
                                              string.Empty);

                int     hits;
                DataSet ds = FillPortalDS(PortalID, userID, r, out hits);

                DataView myDataView = new DataView();
                myDataView = ds.Tables[0].DefaultView;

                if (sortOrder.Equals("Title"))
                {
                    sortOrder = "cleanTitle";
                }

                for (int i = 0; i < myDataView.Table.Columns.Count; i++)
                {
                    DataGrid1.Columns.Add(new BoundColumn());
                    DataGrid1.Columns[i].HeaderText = myDataView.Table.Columns[i].Caption;
                    ((BoundColumn)DataGrid1.Columns[i]).DataField = myDataView.Table.Columns[i].ColumnName;
                    if (myDataView.Table.Columns[i].ColumnName.Equals("cleanTitle"))
                    {
                        DataGrid1.Columns[i].Visible = false;
                    }
                    if (sortOrder.Equals(myDataView.Table.Columns[i].ColumnName))
                    {
                        myDataView.Sort = sortOrder + " ASC";
                    }
                }
                ;

                DataGrid1.DataSource = myDataView;
                DataGrid1.DataBind();
                if (hits == 1)
                {
                    lblHits.Text = "1 " + General.GetString("PORTALSEARCH_HIT", "hit", null);
                }
                else
                {
                    lblHits.Text = Convert.ToString(hits) + " " + General.GetString("PORTALSEARCH_HITS", "hit", null);
                }
            }
            catch (Exception ex)
            {
                lblError.Text    = "We are sorry, an error occurred processing your request.";
                lblError.Visible = true;
                ErrorHandler.Publish(LogLevel.Error, ex);
                return;
            }
        }
Example #32
0
 private bool MatchSearch(T item)
 {
     return(SearchHelper.SearchMatchItem(currentSearchString, item));
 }
Example #33
0
        /// <summary>
        /// Handles the Load event of the Page control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="T:System.EventArgs"/> instance containing the event data.</param>
        private void Page_Load(object sender, EventArgs e)
        {
            lblError.Visible = false;

            sortOrder = Settings["SortOrder"].ToString();
            maxHits   = Int32.Parse(Settings["MaxHits"].ToString());

            //showImage = "True" == Settings["ShowImage"].ToString();
            showModuleName    = "True" == Settings["ShowModuleName"].ToString();
            showTitle         = "True" == Settings["ShowSearchTitle"].ToString();
            showAbstract      = "True" == Settings["ShowAbstract"].ToString();
            showCreatedByUser = "******" == Settings["ShowCreatedByUser"].ToString();
            showCreatedDate   = "True" == Settings["ShowCreatedDate"].ToString();
            showLink          = "True" == Settings["ShowLink"].ToString();
            showTabName       = "True" == Settings["ShowTabName"].ToString();
            showTestInfo      = "True" == Settings["ShowTestInfo"].ToString();
            showModuleTitle   = "True" == Settings["ShowModuleTitle"].ToString();

            ddSearchField.Visible  = "True" == Settings["showddField"].ToString();
            lblField.Visible       = "True" == Settings["showddField"].ToString();
            ddTopics.Visible       = "True" == Settings["showddTopic"].ToString();
            lblTopic.Visible       = "True" == Settings["showddTopic"].ToString();
            ddSearchModule.Visible = "True" == Settings["showddModule"].ToString();
            lblModule.Visible      = "True" == Settings["showddModule"].ToString();

            testUserID = new Guid(Settings["TestUserID"].ToString());

            // Jes1111
            if (Cacheable)
            {
                base.Cacheable = true;
                ModuleConfiguration.Cacheable = true;
            }
            else
            {
                base.Cacheable = false;
                ModuleConfiguration.Cacheable = false;
            }

            if (!IsPostBack)
            {
                // TODO do a better databind
                SearchHelper.AddToDropDownList(PortalID, ref ddSearchModule);

                ddTopics.DataSource = SearchHelper.GetTopicList(PortalID);
                ddTopics.DataBind();

                //Added by Rob Siera 19 aug 2004 - Search for the provided Default_Topic property. Select it if present.
                if (ddTopics.Items.FindByValue(Settings["defaultTopic"].ToString()) != null)
                {
                    ddTopics.SelectedValue = Settings["defaultTopic"].ToString();
                }
                //End addition Rob Siera

                ListItem tmpItem;
                tmpItem = new ListItem(General.GetString("PORTALSEARCH_ALL", "All", null), string.Empty);
                ddSearchField.Items.Add(tmpItem);
                tmpItem = new ListItem(General.GetString("PORTALSEARCH_TITLE", "Title", null), "Title");
                ddSearchField.Items.Add(tmpItem);
            }
        }
Example #34
0
        private Func <CommandEventArgs, Task> APIQuery(APIConfig config) => async e =>
        {
            //get the parameter
            var query = e.GetArg("query")?.Trim();
            if (string.IsNullOrWhiteSpace(query) && !config.AllowEmpty)
            {
                await e.Channel.SendMessage("Query must be provided");

                return;
            }
            //replace any characters or forbidden things
            foreach (var replacer in config.QueryReplacements)
            {
                query = Regex.Replace(query, replacer.Key, x => replacer.Value);
            }
            var link     = config.URL + Uri.EscapeDataString(query) + Regex.Replace(config.URLSuffix, @"%(\d+)random(\d+)%", x => Range.Next(int.Parse(x.Groups[1].Value), int.Parse(x.Groups[2].Value)) + "");
            var response = await SearchHelper.GetResponseStringAsync(link, config.Headers).ConfigureAwait(false);

            string message = "";
            //Get our message
            switch (config.ResponseHandling.Item1)
            {
            case "JSON":
                JToken obj = JObject.Parse(response);
                message = getJsonToken(config.ResponseHandling.Item2, obj).ToString();
                break;

            case "XDOC":
                var doc = XDocument.Load(response);
                message = doc.Descendants(config.ResponseHandling.Item2).FirstOrDefault().Value;
                break;

            case "REGEX":
                var matches = Regex.Matches(response, config.ResponseHandling.Item2);
                if (matches.Count == 0)
                {
                    await e.Channel.SendMessage("responsehandling failed").ConfigureAwait(false);

                    return;
                }
                else
                {
                    message = matches[Range.Next(0, matches.Count)].Value;
                }
                break;

            default:
                await e.Channel.SendMessage("Response handling not specified!").ConfigureAwait(false);

                return;
            }
            //Change anything that needs to be changed
            foreach (var reg in config.RegexOnResponse)
            {
                message = Regex.Replace(message, reg.Key, x => reg.Value);
            }
            if (string.IsNullOrWhiteSpace(message))
            {
                await e.Channel.SendMessage("Something went wrong, no message left").ConfigureAwait(false);

                return;
            }
            await e.Channel.SendMessage(message).ConfigureAwait(false);
        };
Example #35
0
        public override void Remove(Site site, Page o)
        {
            base.Remove(site, o);

            SearchHelper.OpenService(site.GetRepository()).Delete(o);
        }
 public MovieController(MovieRepository repo)
 {
     searchHelper = new SearchHelper(repo);
 }
Example #37
0
        internal override void Init(CommandGroupBuilder cgb)
        {
            cgb.CreateCommand(Module.Prefix + "lolchamp")
            .Description("Shows League Of Legends champion statistics. If there are spaces/apostrophes or in the name - omit them. Optional second parameter is a role.\n**Usage**:~lolchamp Riven or ~lolchamp Annie sup")
            .Parameter("champ", ParameterType.Required)
            .Parameter("position", ParameterType.Unparsed)
            .Do(async e => {
                try {
                    //get role
                    var role             = ResolvePos(e.GetArg("position"));
                    var resolvedRole     = role;
                    var name             = e.GetArg("champ").Replace(" ", "");
                    CachedChampion champ = null;
                    lock (cacheLock) {
                        CachedChampionImages.TryGetValue(name + "_" + resolvedRole, out champ);
                    }
                    if (champ != null)
                    {
                        champ.ImageStream.Position = 0;
                        await e.Channel.SendFile("champ.png", champ.ImageStream);
                        return;
                    }
                    var allData = JArray.Parse(await Classes.SearchHelper.GetResponseStringAsync($"http://api.champion.gg/champion/{name}?api_key={NadekoBot.Creds.LOLAPIKey}"));
                    JToken data = null;
                    if (role != null)
                    {
                        for (var i = 0; i < allData.Count; i++)
                        {
                            if (allData[i]["role"].ToString().Equals(role))
                            {
                                data = allData[i];
                                break;
                            }
                        }
                        if (data == null)
                        {
                            await e.Channel.SendMessage("💢 Data for that role does not exist.");
                            return;
                        }
                    }
                    else
                    {
                        data         = allData[0];
                        role         = allData[0]["role"].ToString();
                        resolvedRole = ResolvePos(role);
                    }
                    lock (cacheLock) {
                        CachedChampionImages.TryGetValue(name + "_" + resolvedRole, out champ);
                    }
                    if (champ != null)
                    {
                        Console.WriteLine("Sending lol image from cache.");
                        champ.ImageStream.Position = 0;
                        await e.Channel.SendFile("champ.png", champ.ImageStream);
                        return;
                    }
                    //name = data["title"].ToString();
                    // get all possible roles, and "select" the shown one
                    var roles = new string[allData.Count];
                    for (var i = 0; i < allData.Count; i++)
                    {
                        roles[i] = allData[i]["role"].ToString();
                        if (roles[i] == role)
                        {
                            roles[i] = ">" + roles[i] + "<";
                        }
                    }
                    var general = JArray.Parse(await SearchHelper.GetResponseStringAsync($"http://api.champion.gg/stats/" +
                                                                                         $"champs/{name}?api_key={NadekoBot.Creds.LOLAPIKey}"))
                                  .FirstOrDefault(jt => jt["role"].ToString() == role)?["general"];
                    if (general == null)
                    {
                        Console.WriteLine("General is null.");
                        return;
                    }
                    //get build data for this role
                    var buildData = data["items"]["mostGames"]["items"];
                    var items     = new string[6];
                    for (var i = 0; i < 6; i++)
                    {
                        items[i] = buildData[i]["id"].ToString();
                    }

                    //get matchup data to show counters and countered champions
                    var matchupDataIE = data["matchups"].ToObject <List <MatchupModel> >();

                    var matchupData = matchupDataIE.OrderBy(m => m.StatScore).ToArray();

                    var countered = new[] { matchupData[0].Name, matchupData[1].Name, matchupData[2].Name };
                    var counters  = new[] { matchupData[matchupData.Length - 1].Name, matchupData[matchupData.Length - 2].Name, matchupData[matchupData.Length - 3].Name };

                    //get runes data
                    var runesJArray = data["runes"]["mostGames"]["runes"] as JArray;
                    var runes       = string.Join("\n", runesJArray.OrderBy(jt => int.Parse(jt["number"].ToString())).Select(jt => jt["number"].ToString() + "x" + jt["name"]));

                    // get masteries data

                    var masteries = (data["masteries"]["mostGames"]["masteries"] as JArray);

                    //get skill order data<API_KEY>

                    var orderArr = (data["skills"]["mostGames"]["order"] as JArray);

                    var img = Image.FromFile("data/lol/bg.png");
                    using (var g = Graphics.FromImage(img)) {
                        g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                        //g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
                        const int margin    = 5;
                        const int imageSize = 75;
                        var normalFont      = new Font("Monaco", 8, FontStyle.Regular);
                        var smallFont       = new Font("Monaco", 7, FontStyle.Regular);
                        //draw champ image
                        var champName = data["key"].ToString().Replace(" ", "");

                        g.DrawImage(GetImage(champName), new Rectangle(margin, margin, imageSize, imageSize));
                        //draw champ name
                        if (champName == "MonkeyKing")
                        {
                            champName = "Wukong";
                        }
                        g.DrawString($"{champName}", new Font("Times New Roman", 24, FontStyle.Regular), Brushes.WhiteSmoke, margin + imageSize + margin, margin);
                        //draw champ surname

                        //draw skill order
                        float orderFormula = 120 / orderArr.Count;
                        const float orderVerticalSpacing = 10;
                        for (var i = 0; i < orderArr.Count; i++)
                        {
                            var orderX    = margin + margin + imageSize + orderFormula * i + i;
                            float orderY  = margin + 35;
                            var spellName = orderArr[i].ToString().ToLowerInvariant();

                            switch (spellName)
                            {
                            case "w":
                                orderY += orderVerticalSpacing;
                                break;

                            case "e":
                                orderY += orderVerticalSpacing * 2;
                                break;

                            case "r":
                                orderY += orderVerticalSpacing * 3;
                                break;

                            default:
                                orderY += orderVerticalSpacing * 3;
                                break;
                            }

                            g.DrawString(spellName.ToUpperInvariant(), new Font("Monaco", 7), Brushes.LimeGreen, orderX, orderY);
                        }
                        //draw roles
                        g.DrawString("Roles: " + string.Join(", ", roles), normalFont, Brushes.WhiteSmoke, margin, margin + imageSize + margin);

                        //draw average stats
                        g.DrawString(
                            $@"    Average Stats

Kills: {general["kills"]}       CS: {general["minionsKilled"]}
Deaths: {general["deaths"]}   Win: {general["winPercent"]}%
Assists: {general["assists"]}  Ban: {general["banRate"]}%
", normalFont, Brushes.WhiteSmoke, img.Width - 150, margin);
                        //draw masteries
                        g.DrawString($"Masteries: {string.Join(" / ", masteries?.Select(jt => jt["total"]))}", normalFont, Brushes.WhiteSmoke, margin, margin + imageSize + margin + 20);
                        //draw runes
                        g.DrawString($"{runes}", smallFont, Brushes.WhiteSmoke, margin, margin + imageSize + margin + 40);
                        //draw counters
                        g.DrawString($"Best against", smallFont, Brushes.WhiteSmoke, margin, img.Height - imageSize + margin);
                        var smallImgSize = 50;

                        for (var i = 0; i < counters.Length; i++)
                        {
                            g.DrawImage(GetImage(counters[i]),
                                        new Rectangle(i * (smallImgSize + margin) + margin, img.Height - smallImgSize - margin,
                                                      smallImgSize,
                                                      smallImgSize));
                        }
                        //draw countered by
                        g.DrawString($"Worst against", smallFont, Brushes.WhiteSmoke, img.Width - 3 * (smallImgSize + margin), img.Height - imageSize + margin);

                        for (var i = 0; i < countered.Length; i++)
                        {
                            var j = countered.Length - i;
                            g.DrawImage(GetImage(countered[i]),
                                        new Rectangle(img.Width - (j * (smallImgSize + margin) + margin), img.Height - smallImgSize - margin,
                                                      smallImgSize,
                                                      smallImgSize));
                        }
                        //draw item build
                        g.DrawString("Popular build", normalFont, Brushes.WhiteSmoke, img.Width - (3 * (smallImgSize + margin) + margin), 77);

                        for (var i = 0; i < 6; i++)
                        {
                            var inverseI = 5 - i;
                            var j        = inverseI % 3 + 1;
                            var k        = inverseI / 3;
                            g.DrawImage(GetImage(items[i], GetImageType.Item),
                                        new Rectangle(img.Width - (j * (smallImgSize + margin) + margin), 92 + k * (smallImgSize + margin),
                                                      smallImgSize,
                                                      smallImgSize));
                        }
                    }
                    var cachedChamp = new CachedChampion {
                        AddedAt = DateTime.Now, ImageStream = img.ToStream(System.Drawing.Imaging.ImageFormat.Png), Name = name.ToLower() + "_" + resolvedRole
                    };
                    CachedChampionImages.Add(cachedChamp.Name, cachedChamp);
                    await e.Channel.SendFile(data["title"] + "_stats.png", cachedChamp.ImageStream);
                } catch {
                    await e.Channel.SendMessage("💢 Failed retreiving data for that champion.");
                }
            });

            cgb.CreateCommand(Module.Prefix + "lolban")
            .Description("Shows top 6 banned champions ordered by ban rate. Ban these champions and you will be Plat 5 in no time.")
            .Do(async e => {
                var showCount = 6;
                //http://api.champion.gg/stats/champs/mostBanned?api_key=YOUR_API_TOKEN&page=1&limit=2
                try {
                    var data = JObject.Parse(
                        await Classes
                        .SearchHelper
                        .GetResponseStringAsync($"http://api.champion.gg/stats/champs/mostBanned?" +
                                                $"api_key={NadekoBot.Creds.LOLAPIKey}&page=1&" +
                                                $"limit={showCount}"))["data"] as JArray;

                    var sb = new StringBuilder();
                    sb.AppendLine($"**Showing {showCount} top banned champions.**");
                    sb.AppendLine($"`{trashTalk[new Random().Next(0, trashTalk.Length)]}`");
                    for (var i = 0; i < data.Count; i++)
                    {
                        if (i % 2 == 0 && i != 0)
                        {
                            sb.AppendLine();
                        }
                        sb.Append($"`{i + 1}.` **{data[i]["name"]}**  ");
                        //sb.AppendLine($" ({data[i]["general"]["banRate"]}%)");
                    }

                    await e.Channel.SendMessage(sb.ToString());
                } catch (Exception ex) {
                    await e.Channel.SendMessage($":anger: Fail: Champion.gg didsabled ban data until next patch. Sorry for the inconvenience.");
                }
            });
        }
        /// <summary>
        /// Set search term(user given) in search model
        /// </summary>
        /// <param name="model"></param>
        private void SearchModelObj(ref BrowseResultsModel model)
        {
            var searchModel = new SearchResultsModel();
            searchModel.Dates = model.Dates;
            searchModel.Location = model.Location;
            searchModel.FirstName = model.FirstName;
            searchModel.LastName = model.LastName;
            searchModel.AllOfTheWordsString = model.AllOfTheWordsString;
            searchModel.ExactPhraseString = string.Empty;
            searchModel.AnyOfTheWordsString = string.Empty;
            searchModel.WithoutWordsString = string.Empty;

            if (!string.IsNullOrWhiteSpace(searchModel.AllOfTheWordsString)) { if (searchModel.AllOfTheWordsString.Trim().ToLower() == "E.g., Moon Landing") { searchModel.AllOfTheWordsString = ""; } }
            if (!string.IsNullOrWhiteSpace(searchModel.FirstName)) { if (searchModel.FirstName.Trim().ToLower() == "e.g., william") { searchModel.FirstName = ""; } }
            if (!string.IsNullOrWhiteSpace(searchModel.LastName)) { if (searchModel.LastName.Trim().ToLower() == "e.g., smith") { searchModel.LastName = ""; } }

            if (String.IsNullOrWhiteSpace(searchModel.AllOfTheWordsString) && String.IsNullOrWhiteSpace(searchModel.ExactPhraseString) && String.IsNullOrWhiteSpace(searchModel.AnyOfTheWordsString) && String.IsNullOrWhiteSpace(searchModel.LastName))
            {
                model.ReturnUrl = string.Empty;
            }
            else
            {
                if (!string.IsNullOrEmpty(model.Location.CountryID)) { searchModel.Location.IsPublicationLocation = true; }

                var helper = new SearchHelper(_savedSearchService, _common);
                if (searchModel.Dates.IsPublicationDate == false) { searchModel.Dates = new DateModels(); }
                else
                {
                    if (searchModel.Dates.IsExactDate == true)
                    {
                        searchModel.Dates.EndYear = "";
                        searchModel.Dates.EndMonth = "";
                        searchModel.Dates.EndDay = "";
                    }
                    if (searchModel.Dates.IsBetweenYears == true)
                    {
                        searchModel.Dates.StartYear = searchModel.Dates.BetweenStartYear;
                        searchModel.Dates.EndYear = searchModel.Dates.BetweenEndYear;

                        searchModel.Dates.StartMonth = "";
                        searchModel.Dates.StartDay = "";
                        searchModel.Dates.EndMonth = "";
                        searchModel.Dates.EndDay = "";
                    }
                    if (searchModel.Dates.IsBetweenDates == true)
                    {
                        searchModel.Dates.StartYear = searchModel.Dates.BetweenDatesYear;
                        searchModel.Dates.StartMonth = searchModel.Dates.BetweenDatesMonth;
                        searchModel.Dates.StartDay = searchModel.Dates.BetweenDatesDay;
                    }
                }

                if (searchModel.Location.IsPublicationLocation == false) { searchModel.Location = new LocationModels(); }
                model.ReturnUrl = helper.getURLfromSearchValues(searchModel, "", 0);

            }
        }
Example #39
0
        internal override void Init(CommandGroupBuilder cgb)
        {
            cgb.CreateCommand(Prefix + "memelist")
            .Description($"Pulls a list of memes you can use with `~memegen` from http://memegen.link/templates/ | `{Prefix}memelist`")
            .Do(async e =>
            {
                int i = 0;
                await e.Channel.SendMessage("`List Of Commands:`\n```xl\n" +
                                            string.Join("\n", JsonConvert.DeserializeObject <Dictionary <string, string> >(await SearchHelper.GetResponseStringAsync("http://memegen.link/templates/"))
                                                        .Select(kvp => Path.GetFileName(kvp.Value))
                                                        .GroupBy(item => (i++) / 4)
                                                        .Select(ig => string.Concat(ig.Select(el => $"{el,-17}"))))
                                            + $"\n```").ConfigureAwait(false);
            });

            cgb.CreateCommand(Prefix + "memegen")
            .Description($"Generates a meme from memelist with top and bottom text. | `{Prefix}memegen biw \"gets iced coffee\" \"in the winter\"`")
            .Parameter("meme", ParameterType.Required)
            .Parameter("toptext", ParameterType.Required)
            .Parameter("bottext", ParameterType.Required)
            .Do(async e =>
            {
                var meme = e.GetArg("meme");
                var top  = Uri.EscapeDataString(e.GetArg("toptext").Replace(' ', '-'));
                var bot  = Uri.EscapeDataString(e.GetArg("bottext").Replace(' ', '-'));
                await e.Channel.SendMessage($"http://memegen.link/{meme}/{top}/{bot}.jpg");
            });
        }
 private string fcnRedirectedPage()
 {
     var url = string.Empty;
     if ((Request.Cookies[_config.GetStringValueFromConfig("cookiePrefix", "NewspaperARCHIVE.com") + ".SearchValues"] != null && Request.Cookies[_config.GetStringValueFromConfig("cookiePrefix", "NewspaperARCHIVE.com") + ".SearchValues"].HasKeys))
     {
         var _searchResModel = new SearchResultsModel();
         var helper = new SearchHelper(_savedSearchService, _common);
         _searchResModel = helper.GetModelSearchValuesCookie(_searchResModel);
         url = helper.getURLfromSearchValues(_searchResModel, "", 0);
     }
     return url;
 }
Example #41
0
        /// <summary>
        /// 选择数据
        /// </summary>
        private void DoSelect()
        {
            // 构建查询表达式
            SearchCriterion sc = new HqlSearchCriterion();

            sc.SetOrder("SortIndex");

            ICriterion crit = null;

            if (RequestActionString == "querychildren")
            {
                if (ids != null && ids.Count > 0 || pids != null && pids.Count > 0)
                {
                    if (ids != null && ids.Count > 0)
                    {
                        IEnumerable <string> distids = ids.Distinct().Where(tent => !String.IsNullOrEmpty(tent));
                        crit = Expression.In(A_TaskWBS.Prop_Id, distids.ToArray());
                    }

                    if (pids != null && pids.Count > 0)
                    {
                        IEnumerable <string> dispids = pids.Distinct().Where(tent => !String.IsNullOrEmpty(tent));

                        if (crit != null)
                        {
                            crit = SearchHelper.UnionCriterions(crit, Expression.In(A_TaskWBS.Prop_ParentID, dispids.ToArray()));
                        }
                        else
                        {
                            crit = Expression.In(A_TaskWBS.Prop_ParentID, dispids.ToArray());
                            string pid = dispids.ToArray()[0];
                            if (pid == "1437f360-6937-409b-9548-964661e6c27c")
                            {
                                string test = pid;
                            }
                            //不是自己责任人的只能看到属于自己的(暂时屏蔽掉,有权限看到自己的子节点)

                            /*if (A_TaskWBS.Find(pid).DutyId.IndexOf(this.UserInfo.UserID) < 0)
                             * {
                             *  //判断是否父节点有权限,有全部输出
                             *  //A_TaskWBS tp = A_TaskWBS.Find(pid);
                             *  string sqlall = " select Id,Path from " + db + "..A_TaskWBS where DutyId like '%" + this.UserInfo.UserID + "%'";
                             *  DataTable dtall = DataHelper.QueryDataTable(sqlall);
                             *  string checksql = "select Id from " + db + "..A_TaskWBS where ParentId='" + pid + "' and ";
                             *  string rules = "";
                             *  foreach (DataRow row in dtall.Rows)
                             *  {
                             *      if (row["Path"] != null && row["Path"].ToString() != "")
                             *          rules += "  Path like '%" + row["Path"] + "%' or";
                             *  }
                             *  if (rules != "") rules = rules.Substring(0, rules.Length - 2);
                             *  if (DataHelper.QueryDataTable(checksql + "(" + rules + ")").Rows.Count == 0)
                             *  {
                             *      //判断有权限的子节点梯队
                             *      string sqlIds = " select Id,Path from " + db + "..A_TaskWBS where DutyId like '%" + this.UserInfo.UserID + "%' and Path like '%" + pid + "%'";
                             *      DataTable dt = DataHelper.QueryDataTable(sqlIds);
                             *      string cids = "";
                             *      string cpids = "";
                             *      foreach (DataRow row in dt.Rows)
                             *      {
                             *          cids += row["Path"].ToString() + '.';
                             *          cpids += " or Path like '%" + row["Path"].ToString() + "%'";
                             *      }
                             *      cids = cids.TrimEnd('.').Replace(".", "','");
                             *      crit = Expression.Sql(" ParentID = '" + pid + "' and  ( Id in ('" + cids + "') " + cpids + " )");//SearchHelper.IntersectCriterions(crit);
                             *
                             *  }
                             * }*/
                        }
                    }
                }
            }
            else
            {
                if (!String.IsNullOrEmpty(year))
                {
                    crit = Expression.Eq(A_TaskWBS.Prop_Year, year);

                    /*EasyDictionary es = SysEnumeration.GetEnumDict("AimType");
                     * foreach (var at in es)
                     * {
                     *  if (!this.RequestData.Get<bool>(at.Value.ToString()))
                     *  {
                     *      crit = SearchHelper.IntersectCriterions(crit, Expression.Not(Expression.Eq(A_TaskWBS.Prop_TaskType, at.Value)));
                     *  }
                     * }*/
                }
                if (this.Request.QueryString["Type"] != null && this.Request.QueryString["Type"].ToString() != "")
                {
                    crit = SearchHelper.UnionCriterions(Expression.IsNull(A_TaskWBS.Prop_ParentID),
                                                        Expression.Eq(A_TaskWBS.Prop_ParentID, String.Empty));
                    //crit = SearchHelper.IntersectCriterions(crit,Expression.Eq(A_TaskWBS.Prop_Type, this.Request.QueryString["Type"].ToString()));
                }
                else
                {
                    /*crit = SearchHelper.UnionCriterions(Expression.IsNull(A_TaskWBS.Prop_ParentID),
                     *  Expression.Eq(A_TaskWBS.Prop_ParentID, String.Empty));
                     * //crit = Expression.Like(A_TaskWBS.Prop_DutyId, this.UserInfo.UserID);*/
                    //先屏蔽掉一进来自己只能看到自己的限制,根据权限过滤查询.
                    //crit = SearchHelper.IntersectCriterions(crit, Expression.Sql(" Id in (select distinct SUBSTRING(isnull(Path,Id),0,37) from A_TaskWBS where DutyId like '%" + this.UserInfo.UserID + "%')"));
                }
                crit = CheckProperty(crit);
            }

            if (crit != null)
            {
                ents = A_TaskWBS.FindAll(sc, crit);
            }
            else
            {
                ents = A_TaskWBS.FindAll(sc);
            }

            if (ents != null && ents.Length != 0)
            {
                this.PageState.Add("DtList", ents.OrderBy(en => en.Code));
            }
        }
Example #42
0
        //权限判定专用
        private ICriterion CheckProperty(ICriterion ic)
        {
            string         sql      = "";
            EasyDictionary dic      = new EasyDictionary();
            DataTable      dt       = new DataTable();
            string         DeptName = this.RequestData.Get <string>("DeptName");

            //能看到全部的角色
            if (this.UserContext.Roles.Where(ent => ent.Name == "全部目标查看").Count() > 0)
            {
                sql = @"select v.Name,isnull(s.sort,v.Type) Type from (select Name,10000 Type from SysGroup as ent WHERE PathLevel=2 and (Type = 2) and Name not in ('院领导','内部退休','副总工程师','临时工')
union
select UserName Name,Type from dbo.View_SysUserGroup  where ChildDeptName='主管院长') v left join {0}..A_SortSetting s on v.Name=s.PName
order by isnull(s.sort,v.Type) asc
";
                dt  = DataHelper.QueryDataTable(string.Format(sql, db));
                this.PageState.Add("CurrentDept", dt.Rows[0][0]);
                ICriterion ich = null;
                if (string.IsNullOrEmpty(DeptName))
                {
                    ich = Expression.Sql(" DutyName ='" + dt.Rows[0][0].ToString() + "'");
                }
                else
                {
                    ich = Expression.Sql(" (DutyName ='" + DeptName + "' or DeptName like '%" + DeptName + "%')");
                }
                ic = SearchHelper.IntersectCriterions(ic, ich);
            }
            //只是主管院长
            else if (this.UserContext.Groups.Where(ent => ent.Name == "主管院长").Count() > 0)
            {
                sql = @"select distinct ParentDeptName from View_SysUserGroup where ChildDeptName='主管院长' and UserId ='{0}'  
                union select '{1}'";
                sql = string.Format(sql, this.UserInfo.UserID, this.UserInfo.Name);
                dt  = DataHelper.QueryDataTable(sql);
                this.PageState.Add("CurrentDept", this.UserInfo.Name);
                ICriterion ich = null;
                if (string.IsNullOrEmpty(DeptName))
                {
                    ich = Expression.Sql(" DutyName ='" + this.UserInfo.Name + "'");
                }
                else
                {
                    ich = Expression.Sql(" (DutyName ='" + DeptName + "' or DeptName like '%" + DeptName + "%')");
                }
                ic = SearchHelper.IntersectCriterions(ic, ich);
            }
            //只是部门长
            else if (this.UserContext.Groups.Where(ent => ent.Name == "所(处、部)长").Count() > 0)
            {
                sql = @"select distinct case when ChildDeptName='所(处、部)长' then ParentDeptName else ChildDeptName end from dbo.View_SysUserGroup where UserId like '%" + this.UserInfo.UserID + "%'";
                dt  = DataHelper.QueryDataTable(sql);
                this.PageState.Add("CurrentDept", dt.Rows[0][0]);
                ICriterion ich = Expression.Sql("( DutyName ='" + dt.Rows[0][0].ToString() + "' or DeptName like '%" + dt.Rows[0][0].ToString() + "%')");
                ic = SearchHelper.IntersectCriterions(ic, ich);
            }
            //普通责任人,能看到自己的责任任务
            else
            {
                sql = @"select distinct case when ChildDeptName='所(处、部)长' then ParentDeptName else ChildDeptName end from dbo.View_SysUserGroup where UserId like '%" + this.UserInfo.UserID + "%' and Type=2";
                dt  = DataHelper.QueryDataTable(sql);
                this.PageState.Add("CurrentDept", dt.Rows[0][0]);
                ICriterion ich = Expression.Sql(" ( DutyName ='" + dt.Rows[0][0].ToString() + "' or DeptName like '%" + dt.Rows[0][0].ToString() + "%')");
                ic = SearchHelper.IntersectCriterions(ic, ich);
            }
            foreach (DataRow row in dt.Rows)
            {
                dic.Add(row[0].ToString(), row[0]);
            }
            this.PageState.Add("Depts", dic);
            return(ic);
        }
Example #43
0
        public override void Install(ModuleManager manager)
        {
            manager.CreateCommands("", cgb => {
                cgb.AddCheck(Classes.Permissions.PermissionChecker.Instance);

                commands.ForEach(cmd => cmd.Init(cgb));

                cgb.CreateCommand(Prefix + "we")
                .Description("Shows weather data for a specified city and a country BOTH ARE REQUIRED. Weather api is very random if you make a mistake.")
                .Parameter("city", ParameterType.Required)
                .Parameter("country", ParameterType.Required)
                .Do(async e => {
                    var city     = e.GetArg("city").Replace(" ", "");
                    var country  = e.GetArg("country").Replace(" ", "");
                    var response = await SearchHelper.GetResponseStringAsync($"http://api.lawlypopzz.xyz/nadekobot/weather/?city={city}&country={country}");

                    var obj = JObject.Parse(response)["weather"];

                    await e.Channel.SendMessage(
                        $@"**`Location:`【{obj["target"]}】
`Temp:` {obj["centigrade"]}°C, {obj["condition"]} `Feels like:` {obj["feelscentigrade"]}°C
`Wind:` {obj["windspeedk"]}km/h {obj["winddir"]} `Humidity:` {obj["humidity"]}%**");
                });


                cgb.CreateCommand(Prefix + "yt")
                .Parameter("query", ParameterType.Unparsed)
                .Description("Searches youtubes and shows the first result")
                .Do(async e => {
                    if (!(await SearchHelper.ValidateQuery(e.Channel, e.GetArg("query"))))
                    {
                        return;
                    }

                    var shortUrl = await SearchHelper.ShortenUrl(await SearchHelper.FindYoutubeUrlByKeywords(e.GetArg("query")));
                    await e.Channel.SendMessage(shortUrl);
                });

                cgb.CreateCommand(Prefix + "ani")
                .Alias(Prefix + "anime", Prefix + "aq")
                .Parameter("query", ParameterType.Unparsed)
                .Description("Queries anilist for an anime and shows the first result.")
                .Do(async e => {
                    if (!(await SearchHelper.ValidateQuery(e.Channel, e.GetArg("query"))))
                    {
                        return;
                    }
                    string result;
                    try {
                        result = (await SearchHelper.GetAnimeData(e.GetArg("query"))).ToString();
                    } catch {
                        await e.Channel.SendMessage("Failed to find that anime.");
                        return;
                    }

                    await e.Channel.SendMessage(result.ToString());
                });

                cgb.CreateCommand(Prefix + "mang")
                .Alias(Prefix + "manga").Alias(Prefix + "mq")
                .Parameter("query", ParameterType.Unparsed)
                .Description("Queries anilist for a manga and shows the first result.")
                .Do(async e => {
                    if (!(await SearchHelper.ValidateQuery(e.Channel, e.GetArg("query"))))
                    {
                        return;
                    }
                    string result;
                    try {
                        result = (await SearchHelper.GetMangaData(e.GetArg("query"))).ToString();
                    } catch {
                        await e.Channel.SendMessage("Failed to find that anime.");
                        return;
                    }
                    await e.Channel.SendMessage(result);
                });

                cgb.CreateCommand(Prefix + "randomcat")
                .Description("Shows a random cat image.")
                .Do(async e => {
                    await e.Channel.SendMessage(JObject.Parse(
                                                    await SearchHelper.GetResponseStringAsync("http://www.random.cat/meow"))["file"].ToString());
                });

                cgb.CreateCommand(Prefix + "i")
                .Description("Pulls the first image found using a search parameter. Use ~ir for different results.\n**Usage**: ~i cute kitten")
                .Parameter("query", ParameterType.Unparsed)
                .Do(async e => {
                    if (string.IsNullOrWhiteSpace(e.GetArg("query")))
                    {
                        return;
                    }
                    try {
                        var reqString = $"https://www.googleapis.com/customsearch/v1?q={Uri.EscapeDataString(e.GetArg("query"))}&cx=018084019232060951019%3Ahs5piey28-e&num=1&searchType=image&fields=items%2Flink&key={NadekoBot.Creds.GoogleAPIKey}";
                        var obj       = JObject.Parse(await SearchHelper.GetResponseStringAsync(reqString));
                        await e.Channel.SendMessage(obj["items"][0]["link"].ToString());
                    } catch (Exception ex) {
                        await e.Channel.SendMessage($"💢 {ex.Message}");
                    }
                });

                cgb.CreateCommand(Prefix + "ir")
                .Description("Pulls a random image using a search parameter.\n**Usage**: ~ir cute kitten")
                .Parameter("query", ParameterType.Unparsed)
                .Do(async e => {
                    if (string.IsNullOrWhiteSpace(e.GetArg("query")))
                    {
                        return;
                    }
                    try {
                        var reqString = $"https://www.googleapis.com/customsearch/v1?q={Uri.EscapeDataString(e.GetArg("query"))}&cx=018084019232060951019%3Ahs5piey28-e&num=1&searchType=image&start={ rng.Next(1, 150) }&fields=items%2Flink&key={NadekoBot.Creds.GoogleAPIKey}";
                        var obj       = JObject.Parse(await SearchHelper.GetResponseStringAsync(reqString));
                        await e.Channel.SendMessage(obj["items"][0]["link"].ToString());
                    } catch (Exception ex) {
                        await e.Channel.SendMessage($"💢 {ex.Message}");
                    }
                });
                cgb.CreateCommand(Prefix + "lmgtfy")
                .Description("Google something for an idiot.")
                .Parameter("ffs", ParameterType.Unparsed)
                .Do(async e => {
                    if (e.GetArg("ffs") == null || e.GetArg("ffs").Length < 1)
                    {
                        return;
                    }
                    await e.Channel.SendMessage(await $"http://lmgtfy.com/?q={ Uri.EscapeUriString(e.GetArg("ffs").ToString()) }".ShortenUrl());
                });

                cgb.CreateCommand(Prefix + "hs")
                .Description("Searches for a Hearthstone card and shows its image. Takes a while to complete.\n**Usage**:~hs Ysera")
                .Parameter("name", ParameterType.Unparsed)
                .Do(async e => {
                    var arg = e.GetArg("name");
                    if (string.IsNullOrWhiteSpace(arg))
                    {
                        await e.Channel.SendMessage("💢 Please enter a card name to search for.");
                        return;
                    }
                    await e.Channel.SendIsTyping();
                    var headers = new Dictionary <string, string> {
                        { "X-Mashape-Key", NadekoBot.Creds.MashapeKey }
                    };
                    var res = await SearchHelper.GetResponseStringAsync($"https://omgvamp-hearthstone-v1.p.mashape.com/cards/search/{Uri.EscapeUriString(arg)}", headers);
                    try {
                        var items  = JArray.Parse(res);
                        var images = new List <Image>();
                        if (items == null)
                        {
                            throw new KeyNotFoundException("Cannot find a card by that name");
                        }
                        var cnt = 0;
                        items.Shuffle();
                        foreach (var item in items.TakeWhile(item => cnt++ < 4).Where(item => item.HasValues && item["img"] != null))
                        {
                            images.Add(
                                Image.FromStream(await SearchHelper.GetResponseStreamAsync(item["img"].ToString())));
                        }
                        if (items.Count > 4)
                        {
                            await e.Channel.SendMessage("⚠ Found over 4 images. Showing random 4.");
                        }
                        await e.Channel.SendFile(arg + ".png", (await images.MergeAsync()).ToStream(System.Drawing.Imaging.ImageFormat.Png));
                    } catch (Exception ex) {
                        await e.Channel.SendMessage($"💢 Error {ex.Message}");
                    }
                });

                cgb.CreateCommand(Prefix + "osu")
                .Description("Shows osu stats for a player.\n**Usage**:~osu Name")
                .Parameter("usr", ParameterType.Unparsed)
                .Do(async e => {
                    if (string.IsNullOrWhiteSpace(e.GetArg("usr")))
                    {
                        return;
                    }

                    using (WebClient cl = new WebClient()) {
                        try {
                            cl.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
                            cl.Headers.Add(HttpRequestHeader.UserAgent, "Mozilla/5.0 (Windows NT 6.2; Win64; x64)");
                            cl.DownloadDataAsync(new Uri($"http://lemmmy.pw/osusig/sig.php?uname={ e.GetArg("usr") }&flagshadow&xpbar&xpbarhex&pp=2"));
                            cl.DownloadDataCompleted += async(s, cle) => {
                                try {
                                    await e.Channel.SendFile($"{e.GetArg("usr")}.png", new MemoryStream(cle.Result));
                                    await e.Channel.SendMessage($"`Profile Link:`https://osu.ppy.sh/u/{Uri.EscapeDataString(e.GetArg("usr"))}\n`Image provided by https://lemmmy.pw/osusig`");
                                } catch { }
                            };
                        } catch {
                            await e.Channel.SendMessage("💢 Failed retrieving osu signature :\\");
                        }
                    }
                });

                cgb.CreateCommand(Prefix + "ud")
                .Description("Searches Urban Dictionary for a word.\n**Usage**:~ud Pineapple")
                .Parameter("query", ParameterType.Unparsed)
                .Do(async e => {
                    var arg = e.GetArg("query");
                    if (string.IsNullOrWhiteSpace(arg))
                    {
                        await e.Channel.SendMessage("💢 Please enter a search term.");
                        return;
                    }
                    await e.Channel.SendIsTyping();
                    var headers = new Dictionary <string, string> {
                        { "X-Mashape-Key", NadekoBot.Creds.MashapeKey }
                    };
                    var res = await SearchHelper.GetResponseStringAsync($"https://mashape-community-urban-dictionary.p.mashape.com/define?term={Uri.EscapeUriString(arg)}", headers);
                    try {
                        var items = JObject.Parse(res);
                        var sb    = new System.Text.StringBuilder();
                        sb.AppendLine($"`Term:` {items["list"][0]["word"].ToString()}");
                        sb.AppendLine($"`Definition:` {items["list"][0]["definition"].ToString()}");
                        sb.Append($"`Link:` <{await items["list"][0]["permalink"].ToString().ShortenUrl()}>");
                        await e.Channel.SendMessage(sb.ToString());
                    } catch {
                        await e.Channel.SendMessage("💢 Failed finding a definition for that term.");
                    }
                });
                // thanks to Blaubeerwald
                cgb.CreateCommand(Prefix + "#")
                .Description("Searches Tagdef.com for a hashtag.\n**Usage**:~# ff")
                .Parameter("query", ParameterType.Unparsed)
                .Do(async e => {
                    var arg = e.GetArg("query");
                    if (string.IsNullOrWhiteSpace(arg))
                    {
                        await e.Channel.SendMessage("💢 Please enter a search term.");
                        return;
                    }
                    await e.Channel.SendIsTyping();
                    var headers = new Dictionary <string, string> {
                        { "X-Mashape-Key", NadekoBot.Creds.MashapeKey }
                    };
                    var res = await SearchHelper.GetResponseStringAsync($"https://tagdef.p.mashape.com/one.{Uri.EscapeUriString(arg)}.json", headers);
                    try {
                        var items = JObject.Parse(res);
                        var sb    = new System.Text.StringBuilder();
                        sb.AppendLine($"`Hashtag:` {items["defs"]["def"]["hashtag"].ToString()}");
                        sb.AppendLine($"`Definition:` {items["defs"]["def"]["text"].ToString()}");
                        sb.Append($"`Link:` <{await items["defs"]["def"]["uri"].ToString().ShortenUrl()}>");
                        await e.Channel.SendMessage(sb.ToString());
                    } catch {
                        await e.Channel.SendMessage("💢 Failed finidng a definition for that tag.");
                    }
                });

                cgb.CreateCommand(Prefix + "quote")
                .Description("Shows a random quote.")
                .Do(async e => {
                    await
                    e.Channel.SendMessage(
                        NadekoBot.Config.Quotes[new Random().Next(0, NadekoBot.Config.Quotes.Count)].ToString());
                });
            });
        }
Example #44
0
        public override void Install(ModuleManager manager)
        {
            var client = NadekoBot.Client;

            manager.CreateCommands(Prefix, cgb =>
            {
                cgb.AddCheck(PermissionChecker.Instance);

                commands.ForEach(cmd => cmd.Init(cgb));

                cgb.CreateCommand("n")
                .Alias("next")
                .Alias("skip")
                .Description("Goes to the next song in the queue. You have to be in the same voice channel as the bot.\n**Usage**: `!m n`")
                .Do(e =>
                {
                    MusicPlayer musicPlayer;
                    if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                    {
                        return;
                    }
                    if (musicPlayer.PlaybackVoiceChannel == e.User.VoiceChannel)
                    {
                        musicPlayer.Next();
                    }
                });

                cgb.CreateCommand("s")
                .Alias("stop")
                .Description("Stops the music and clears the playlist. Stays in the channel.\n**Usage**: `!m s`")
                .Do(async e =>
                {
                    await Task.Run(() =>
                    {
                        MusicPlayer musicPlayer;
                        if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                        {
                            return;
                        }
                        if (e.User.VoiceChannel == musicPlayer.PlaybackVoiceChannel)
                        {
                            musicPlayer.Stop();
                        }
                    }).ConfigureAwait(false);
                });

                cgb.CreateCommand("d")
                .Alias("destroy")
                .Description("Completely stops the music and unbinds the bot from the channel. " +
                             "(may cause weird behaviour)\n**Usage**: `!m d`")
                .Do(async e =>
                {
                    await Task.Run(() =>
                    {
                        MusicPlayer musicPlayer;
                        if (!MusicPlayers.TryRemove(e.Server, out musicPlayer))
                        {
                            return;
                        }
                        if (e.User.VoiceChannel == musicPlayer.PlaybackVoiceChannel)
                        {
                            musicPlayer.Destroy();
                        }
                    }).ConfigureAwait(false);
                });

                cgb.CreateCommand("p")
                .Alias("pause")
                .Description("Pauses or Unpauses the song.\n**Usage**: `!m p`")
                .Do(async e =>
                {
                    MusicPlayer musicPlayer;
                    if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                    {
                        return;
                    }
                    if (e.User.VoiceChannel != musicPlayer.PlaybackVoiceChannel)
                    {
                        return;
                    }
                    musicPlayer.TogglePause();
                    if (musicPlayer.Paused)
                    {
                        await e.Channel.SendMessage("🎵`Music Player paused.`").ConfigureAwait(false);
                    }
                    else
                    {
                        await e.Channel.SendMessage("🎵`Music Player unpaused.`").ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand("q")
                .Alias("yq")
                .Description("Queue a song using keywords or a link. Bot will join your voice channel." +
                             "**You must be in a voice channel**.\n**Usage**: `!m q Dream Of Venice`")
                .Parameter("query", ParameterType.Unparsed)
                .Do(async e =>
                {
                    await QueueSong(e.Channel, e.User.VoiceChannel, e.GetArg("query")).ConfigureAwait(false);
                    if (e.Server.CurrentUser.GetPermissions(e.Channel).ManageMessages)
                    {
                        await Task.Delay(10000).ConfigureAwait(false);
                        await e.Message.Delete().ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand("lq")
                .Alias("ls").Alias("lp")
                .Description("Lists up to 15 currently queued songs.\n**Usage**: `!m lq`")
                .Do(async e =>
                {
                    MusicPlayer musicPlayer;
                    if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                    {
                        await e.Channel.SendMessage("🎵 No active music player.").ConfigureAwait(false);
                        return;
                    }
                    var currentSong = musicPlayer.CurrentSong;
                    if (currentSong == null)
                    {
                        return;
                    }
                    var toSend = $"🎵`Now Playing` {currentSong.PrettyName} " + $"{currentSong.PrettyCurrentTime()}\n";
                    if (musicPlayer.RepeatSong)
                    {
                        toSend += "🔂";
                    }
                    else if (musicPlayer.RepeatPlaylist)
                    {
                        toSend += "🔁";
                    }
                    toSend += $" **{musicPlayer.Playlist.Count}** `tracks currently queued.` ";
                    if (musicPlayer.Playlist.Count >= MusicPlayer.MaximumPlaylistSize)
                    {
                        toSend += "**Song queue is full!**\n";
                    }
                    else
                    {
                        toSend += "\n";
                    }
                    var number = 1;
                    await e.Channel.SendMessage(toSend + string.Join("\n", musicPlayer.Playlist.Take(15).Select(v => $"`{number++}.` {v.PrettyName}"))).ConfigureAwait(false);
                });

                cgb.CreateCommand("np")
                .Alias("playing")
                .Description("Shows the song currently playing.\n**Usage**: `!m np`")
                .Do(async e =>
                {
                    MusicPlayer musicPlayer;
                    if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                    {
                        return;
                    }
                    var currentSong = musicPlayer.CurrentSong;
                    if (currentSong == null)
                    {
                        return;
                    }
                    await e.Channel.SendMessage($"🎵`Now Playing` {currentSong.PrettyName} " +
                                                $"{currentSong.PrettyCurrentTime()}").ConfigureAwait(false);
                });

                cgb.CreateCommand("vol")
                .Description("Sets the music volume 0-100%\n**Usage**: `!m vol 50`")
                .Parameter("val", ParameterType.Required)
                .Do(async e =>
                {
                    MusicPlayer musicPlayer;
                    if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                    {
                        return;
                    }
                    if (e.User.VoiceChannel != musicPlayer.PlaybackVoiceChannel)
                    {
                        return;
                    }
                    var arg = e.GetArg("val");
                    int volume;
                    if (!int.TryParse(arg, out volume))
                    {
                        await e.Channel.SendMessage("Volume number invalid.").ConfigureAwait(false);
                        return;
                    }
                    volume = musicPlayer.SetVolume(volume);
                    await e.Channel.SendMessage($"🎵 `Volume set to {volume}%`").ConfigureAwait(false);
                });

                cgb.CreateCommand("dv")
                .Alias("defvol")
                .Description("Sets the default music volume when music playback is started (0-100)." +
                             " Does not persist through restarts.\n**Usage**: `!m dv 80`")
                .Parameter("val", ParameterType.Required)
                .Do(async e =>
                {
                    var arg = e.GetArg("val");
                    float volume;
                    if (!float.TryParse(arg, out volume) || volume < 0 || volume > 100)
                    {
                        await e.Channel.SendMessage("Volume number invalid.").ConfigureAwait(false);
                        return;
                    }
                    DefaultMusicVolumes.AddOrUpdate(e.Server.Id, volume / 100, (key, newval) => volume / 100);
                    await e.Channel.SendMessage($"🎵 `Default volume set to {volume}%`").ConfigureAwait(false);
                });

                cgb.CreateCommand("min").Alias("mute")
                .Description("Sets the music volume to 0%\n**Usage**: `!m min`")
                .Do(e =>
                {
                    MusicPlayer musicPlayer;
                    if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                    {
                        return;
                    }
                    if (e.User.VoiceChannel != musicPlayer.PlaybackVoiceChannel)
                    {
                        return;
                    }
                    musicPlayer.SetVolume(0);
                });

                cgb.CreateCommand("max")
                .Description("Sets the music volume to 100% (real max is actually 150%).\n**Usage**: `!m max`")
                .Do(e =>
                {
                    MusicPlayer musicPlayer;
                    if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                    {
                        return;
                    }
                    if (e.User.VoiceChannel != musicPlayer.PlaybackVoiceChannel)
                    {
                        return;
                    }
                    musicPlayer.SetVolume(100);
                });

                cgb.CreateCommand("half")
                .Description("Sets the music volume to 50%.\n**Usage**: `!m half`")
                .Do(e =>
                {
                    MusicPlayer musicPlayer;
                    if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                    {
                        return;
                    }
                    if (e.User.VoiceChannel != musicPlayer.PlaybackVoiceChannel)
                    {
                        return;
                    }
                    musicPlayer.SetVolume(50);
                });

                cgb.CreateCommand("sh")
                .Description("Shuffles the current playlist.\n**Usage**: `!m sh`")
                .Do(async e =>
                {
                    MusicPlayer musicPlayer;
                    if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                    {
                        return;
                    }
                    if (e.User.VoiceChannel != musicPlayer.PlaybackVoiceChannel)
                    {
                        return;
                    }
                    if (musicPlayer.Playlist.Count < 2)
                    {
                        await e.Channel.SendMessage("💢 Not enough songs in order to perform the shuffle.").ConfigureAwait(false);
                        return;
                    }

                    musicPlayer.Shuffle();
                    await e.Channel.SendMessage("🎵 `Songs shuffled.`").ConfigureAwait(false);
                });

                cgb.CreateCommand("pl")
                .Description("Queues up to 25 songs from a youtube playlist specified by a link, or keywords.\n**Usage**: `!m pl playlist link or name`")
                .Parameter("playlist", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var arg = e.GetArg("playlist");
                    if (string.IsNullOrWhiteSpace(arg))
                    {
                        return;
                    }
                    if (e.User.VoiceChannel?.Server != e.Server)
                    {
                        await e.Channel.SendMessage("💢 You need to be in a voice channel on this server.\n If you are already in a voice channel, try rejoining it.").ConfigureAwait(false);
                        return;
                    }
                    var ids = await SearchHelper.GetVideoIDs(await SearchHelper.GetPlaylistIdByKeyword(arg).ConfigureAwait(false), 50).ConfigureAwait(false);
                    //todo TEMPORARY SOLUTION, USE RESOLVE QUEUE IN THE FUTURE
                    var idArray = ids as string[] ?? ids.ToArray();
                    var count   = idArray.Count();
                    var msg     =
                        await e.Channel.SendMessage($"🎵 `Attempting to queue {count} songs".SnPl(count) + "...`").ConfigureAwait(false);
                    foreach (var id in idArray)
                    {
                        try
                        {
                            await QueueSong(e.Channel, e.User.VoiceChannel, id, true).ConfigureAwait(false);
                        }
                        catch { }
                    }
                    await msg.Edit("🎵 `Playlist queue complete.`").ConfigureAwait(false);
                });

                cgb.CreateCommand("lopl")
                .Description("Queues up to 50 songs from a directory. **Owner Only!**\n**Usage**: `!m lopl C:/music/classical`")
                .Parameter("directory", ParameterType.Unparsed)
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(async e =>
                {
                    var arg = e.GetArg("directory");
                    if (string.IsNullOrWhiteSpace(arg))
                    {
                        return;
                    }
                    try
                    {
                        var fileEnum = new DirectoryInfo(arg).GetFiles()
                                       .Where(x => !x.Attributes.HasFlag(FileAttributes.Hidden | FileAttributes.System));
                        foreach (var file in fileEnum)
                        {
                            await QueueSong(e.Channel, e.User.VoiceChannel, file.FullName, true, MusicType.Local).ConfigureAwait(false);
                        }
                        await e.Channel.SendMessage("🎵 `Directory queue complete.`").ConfigureAwait(false);
                    }
                    catch { }
                });

                cgb.CreateCommand("radio").Alias("ra")
                .Description("Queues a radio stream from a link. It can be a direct mp3 radio stream, .m3u, .pls .asx or .xspf\n**Usage**: `!m ra radio link here`")
                .Parameter("radio_link", ParameterType.Required)
                .Do(async e =>
                {
                    if (e.User.VoiceChannel?.Server != e.Server)
                    {
                        await e.Channel.SendMessage("💢 You need to be in a voice channel on this server.\n If you are already in a voice channel, try rejoining it.").ConfigureAwait(false);
                        return;
                    }
                    await QueueSong(e.Channel, e.User.VoiceChannel, e.GetArg("radio_link"), musicType: MusicType.Radio).ConfigureAwait(false);
                    if (e.Server.CurrentUser.GetPermissions(e.Channel).ManageMessages)
                    {
                        await Task.Delay(10000).ConfigureAwait(false);
                        await e.Message.Delete().ConfigureAwait(false);
                    }
                });

                cgb.CreateCommand("lo")
                .Description("Queues a local file by specifying a full path. **Owner Only!**\n**Usage**: `!m ra C:/music/mysong.mp3`")
                .Parameter("path", ParameterType.Unparsed)
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(async e =>
                {
                    var arg = e.GetArg("path");
                    if (string.IsNullOrWhiteSpace(arg))
                    {
                        return;
                    }
                    await QueueSong(e.Channel, e.User.VoiceChannel, e.GetArg("path"), musicType: MusicType.Local).ConfigureAwait(false);
                });

                cgb.CreateCommand("mv")
                .Description("Moves the bot to your voice channel. (works only if music is already playing)\n**Usage**: `!m mv`")
                .Do(e =>
                {
                    MusicPlayer musicPlayer;
                    var voiceChannel = e.User.VoiceChannel;
                    if (voiceChannel == null || voiceChannel.Server != e.Server || !MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                    {
                        return;
                    }
                    musicPlayer.MoveToVoiceChannel(voiceChannel);
                });

                cgb.CreateCommand("rm")
                .Description("Remove a song by its # in the queue, or 'all' to remove whole queue.\n**Usage**: `!m rm 5`")
                .Parameter("num", ParameterType.Required)
                .Do(async e =>
                {
                    var arg = e.GetArg("num");
                    MusicPlayer musicPlayer;
                    if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                    {
                        return;
                    }
                    if (e.User.VoiceChannel != musicPlayer.PlaybackVoiceChannel)
                    {
                        return;
                    }
                    if (arg?.ToLower() == "all")
                    {
                        musicPlayer.ClearQueue();
                        await e.Channel.SendMessage($"🎵`Queue cleared!`").ConfigureAwait(false);
                        return;
                    }
                    int num;
                    if (!int.TryParse(arg, out num))
                    {
                        return;
                    }
                    if (num <= 0 || num > musicPlayer.Playlist.Count)
                    {
                        return;
                    }
                    var song = (musicPlayer.Playlist as List <Song>)?[num - 1];
                    musicPlayer.RemoveSongAt(num - 1);
                    await e.Channel.SendMessage($"🎵**Track {song.PrettyName} at position `#{num}` has been removed.**").ConfigureAwait(false);
                });

                cgb.CreateCommand("cleanup")
                .Description("Cleans up hanging voice connections. **Owner Only!**\n**Usage**: `!m cleanup`")
                .AddCheck(SimpleCheckers.OwnerOnly())
                .Do(e =>
                {
                    foreach (var kvp in MusicPlayers)
                    {
                        var songs       = kvp.Value.Playlist;
                        var currentSong = kvp.Value.CurrentSong;
                        if (songs.Count == 0 && currentSong == null)
                        {
                            MusicPlayer throwaway;
                            MusicPlayers.TryRemove(kvp.Key, out throwaway);
                            throwaway.Destroy();
                        }
                    }
                });

                cgb.CreateCommand("rcs")
                .Alias("repeatcurrentsong")
                .Description("Toggles repeat of current song.\n**Usage**: `!m rcs`")
                .Do(async e =>
                {
                    MusicPlayer musicPlayer;
                    if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                    {
                        return;
                    }
                    var currentSong = musicPlayer.CurrentSong;
                    if (currentSong == null)
                    {
                        return;
                    }
                    var currentValue = musicPlayer.ToggleRepeatSong();
                    await e.Channel.SendMessage(currentValue ?
                                                $"🎵🔂`Repeating track:`{currentSong.PrettyName}" :
                                                $"🎵🔂`Current track repeat stopped.`")
                    .ConfigureAwait(false);
                });

                cgb.CreateCommand("rpl")
                .Alias("repeatplaylist")
                .Description("Toggles repeat of all songs in the queue (every song that finishes is added to the end of the queue).\n**Usage**: `!m rpl`")
                .Do(async e =>
                {
                    MusicPlayer musicPlayer;
                    if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                    {
                        return;
                    }
                    var currentValue = musicPlayer.ToggleRepeatPlaylist();
                    await e.Channel.SendMessage($"🎵🔁`Repeat playlist {(currentValue ? "enabled" : "disabled")}`").ConfigureAwait(false);
                });

                cgb.CreateCommand("save")
                .Description("Saves a playlist under a certain name. Name must be no longer than 20 characters and mustn't contain dashes.\n**Usage**: `!m save classical1`")
                .Parameter("name", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var name = e.GetArg("name")?.Trim();

                    if (string.IsNullOrWhiteSpace(name) ||
                        name.Length > 20 ||
                        name.Contains("-"))
                    {
                        return;
                    }

                    MusicPlayer musicPlayer;
                    if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                    {
                        return;
                    }

                    //to avoid concurrency issues
                    var currentPlaylist = new List <Song>(musicPlayer.Playlist);
                    var curSong         = musicPlayer.CurrentSong;
                    if (curSong != null)
                    {
                        currentPlaylist.Insert(0, curSong);
                    }

                    if (!currentPlaylist.Any())
                    {
                        return;
                    }


                    var songInfos = currentPlaylist.Select(s => new DataModels.SongInfo
                    {
                        Provider     = s.SongInfo.Provider,
                        ProviderType = (int)s.SongInfo.ProviderType,
                        Title        = s.SongInfo.Title,
                        Uri          = s.SongInfo.Uri,
                        Query        = s.SongInfo.Query,
                    }).ToList();

                    var playlist = new MusicPlaylist
                    {
                        CreatorId   = (long)e.User.Id,
                        CreatorName = e.User.Name,
                        Name        = name.ToLowerInvariant(),
                    };
                    DbHandler.Instance.SaveAll(songInfos);
                    DbHandler.Instance.Save(playlist);
                    DbHandler.Instance.InsertMany(songInfos.Select(s => new PlaylistSongInfo
                    {
                        PlaylistId = playlist.Id.Value,
                        SongInfoId = s.Id.Value
                    }));

                    await e.Channel.SendMessage($"🎵 `Saved playlist as {name}-{playlist.Id}`").ConfigureAwait(false);
                });

                //cgb.CreateCommand("info")
                //    .Description("Prints music info (queued/finished/playing) only to this channel")
                //    .Do(async e =>
                //    {
                //        MusicPlayer musicPlayer;
                //        if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                //            return;
                //        musicPlayer
                //    });

                cgb.CreateCommand("load")
                .Description("Loads a playlist under a certain name. \n**Usage**: `!m load classical-1`")
                .Parameter("name", ParameterType.Unparsed)
                .Do(async e =>
                {
                    var voiceCh = e.User.VoiceChannel;
                    var textCh  = e.Channel;
                    if (voiceCh == null || voiceCh.Server != textCh.Server)
                    {
                        await textCh.SendMessage("💢 You need to be in a voice channel on this server.\n If you are already in a voice channel, try rejoining.").ConfigureAwait(false);
                        return;
                    }
                    var name = e.GetArg("name")?.Trim().ToLowerInvariant();

                    if (string.IsNullOrWhiteSpace(name))
                    {
                        return;
                    }

                    var parts = name.Split('-');
                    if (parts.Length != 2)
                    {
                        return;
                    }
                    var playlistName = parts[0];

                    int playlistNumber;
                    if (!int.TryParse(parts[1], out playlistNumber))
                    {
                        return;
                    }

                    var playlist = DbHandler.Instance.FindOne <MusicPlaylist>(
                        p => p.Id == playlistNumber);

                    if (playlist == null)
                    {
                        await e.Channel.SendMessage("Can't find playlist under that name.").ConfigureAwait(false);
                        return;
                    }

                    var psis = DbHandler.Instance.FindAll <PlaylistSongInfo>(psi =>
                                                                             psi.PlaylistId == playlist.Id);

                    var songInfos = psis.Select(psi => DbHandler.Instance
                                                .FindOne <DataModels.SongInfo>(si => si.Id == psi.SongInfoId));

                    await e.Channel.SendMessage($"`Attempting to load {songInfos.Count()} songs`").ConfigureAwait(false);
                    foreach (var si in songInfos)
                    {
                        try
                        {
                            await QueueSong(textCh, voiceCh, si.Query, true, (MusicType)si.ProviderType).ConfigureAwait(false);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine($"Failed QueueSong in load playlist. {ex}");
                        }
                    }
                });

                cgb.CreateCommand("goto")
                .Description("Goes to a specific time in seconds in a song.")
                .Parameter("time")
                .Do(async e =>
                {
                    var skipToStr = e.GetArg("time")?.Trim();
                    MusicPlayer musicPlayer;
                    if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
                    {
                        return;
                    }
                    if (e.User.VoiceChannel != musicPlayer.PlaybackVoiceChannel)
                    {
                        return;
                    }
                    int skipTo;
                    if (!int.TryParse(skipToStr, out skipTo) || skipTo < 0)
                    {
                        return;
                    }

                    var currentSong = musicPlayer.CurrentSong;

                    if (currentSong == null)
                    {
                        return;
                    }

                    //currentSong.PrintStatusMessage = false;
                    var gotoSong    = currentSong.Clone();
                    gotoSong.SkipTo = skipTo;
                    musicPlayer.AddSong(gotoSong, 0);
                    musicPlayer.Next();

                    var minutes = (skipTo / 60).ToString();
                    var seconds = (skipTo % 60).ToString();

                    if (minutes.Length == 1)
                    {
                        minutes = "0" + minutes;
                    }
                    if (seconds.Length == 1)
                    {
                        seconds = "0" + seconds;
                    }

                    await e.Channel.SendMessage($"`Skipped to {minutes}:{seconds}`").ConfigureAwait(false);
                });
            });
        }
        private static bool[] Search(List <CustomFileInfo> files, string fileName, FileSettings fileSettings, ref int resultsCount, string searchName, bool somethingFound)
        {
            bool   isRegexSearch = fileName.Contains("*");
            string pattern       = string.Empty;

            if (isRegexSearch)
            {
                pattern = GetRegexpFromString(fileName);
            }

            foreach (var file in files)
            {
                bool isFileFound;
                if (isRegexSearch)
                {
                    isFileFound = Regex.IsMatch(file.Filename, pattern, RegexOptions.IgnoreCase);
                }
                else
                {
                    isFileFound = file.Filename.ToLower() == fileName;
                }

                if (isFileFound)
                {
                    if (!somethingFound)
                    {
                        Beaprint.MainPrint($"Found {searchName} Files");
                        somethingFound = true;
                    }

                    // there are no inner sections
                    if (fileSettings.files == null)
                    {
                        var isProcessed = ProcessResult(file, fileSettings, ref resultsCount);
                        if (!isProcessed)
                        {
                            return(new bool[] { true, somethingFound });
                        }
                    }
                    // there are inner sections
                    else
                    {
                        foreach (var innerFileToSearch in fileSettings.files)
                        {
                            // search for inner files/folders by inner file/folder name
                            var innerFiles = SearchHelper.GetFilesFast(file.FullPath, innerFileToSearch.name, isFoldersIncluded: true);

                            foreach (var innerFile in innerFiles)
                            {
                                // process inner file/folder
                                var isProcessed = ProcessResult(innerFile, innerFileToSearch.value, ref resultsCount);
                                if (!isProcessed)
                                {
                                    return(new bool[] { true, somethingFound });
                                }
                            }
                        }
                    }
                }
            }

            return(new bool[] { false, somethingFound });
        }