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(); }
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); }
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(); }
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); }
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; }
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; }
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); }); }); }
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; } }
/// <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); }
/// <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); }); }
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(); } } }
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); }
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); }
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); }
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); }); }); }
/// <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; } }
private bool MatchSearch(T item) { return(SearchHelper.SearchMatchItem(currentSearchString, item)); }
/// <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); } }
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); };
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); }
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); } }
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; }
/// <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)); } }
//权限判定专用 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); }
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()); }); }); }
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 }); }