public void Test_DecrementOperation() { const string key = "Test_DecrementOperation"; //delete key if exists var delete = new Delete(key, GetVBucket(), Transcoder, OperationLifespanTimeout); var result = IOService.Execute(delete); Console.WriteLine("Deleting key {0}: {1}", key, result.Success); //increment the key var operation = new Increment(key, 1, 1, 0, GetVBucket(), Transcoder, OperationLifespanTimeout); var result1 = IOService.Execute(operation); Assert.IsTrue(result1.Success); Assert.AreEqual(result1.Value, 1); //key should be 1 var get = new Get<string>(key, GetVBucket(), Transcoder, OperationLifespanTimeout); var result3 = IOService.Execute(get); Assert.AreEqual(result1.Value.ToString(CultureInfo.InvariantCulture), result3.Value); //decrement the key var decrement = new Decrement(key, 1, 1, 0, GetVBucket(), Transcoder, OperationLifespanTimeout); var result2 = IOService.Execute(decrement); Assert.IsTrue(result2.Success); Assert.AreEqual(result2.Value, 0); //key should be 0 get = new Get<string>(key, GetVBucket(), Transcoder, OperationLifespanTimeout); result3 = IOService.Execute(get); Assert.AreEqual(0.ToString(CultureInfo.InvariantCulture), result3.Value); }
public void When_Key_Exists_Append_Succeeds() { const string key = "Hello"; const string expected = "Hello!"; //clean up old keys var deleteOperation = new Delete(key, GetVBucket(), Converter, Serializer); IOStrategy.Execute(deleteOperation); deleteOperation = new Delete(key + "!", GetVBucket(), Converter, Serializer); IOStrategy.Execute(deleteOperation); //create the key var set = new Set<string>(key, "Hello", GetVBucket(), Converter); var addResult = IOStrategy.Execute(set); Assert.IsTrue(addResult.Success); var append = new Append<string>(key, "!", Serializer, GetVBucket(), Converter); var result = IOStrategy.Execute(append); Assert.IsTrue(result.Success); Assert.AreEqual(string.Empty, result.Value); var get = new Get<string>(key, GetVBucket(), Converter, Serializer); var getResult = IOStrategy.Execute(get); Assert.AreEqual(expected, getResult.Value); }
public void When_Document_Exists_Replace_Succeeds() { const string key = "Replace.When_Document_Exists_Replace_Succeeds"; //delete the value if it exists var delete = new Delete(key, GetVBucket(), Transcoder, OperationLifespanTimeout); var result = IOService.Execute(delete); Console.WriteLine(result.Message); //add the new doc var add = new Add<dynamic>(key, new { foo = "foo" }, GetVBucket(), Transcoder, OperationLifespanTimeout); var result1 = IOService.Execute(add); Assert.IsTrue(result1.Success); //replace it the old doc with a new one var replace = new Replace<dynamic>(key, new { bar = "bar" }, GetVBucket(), Transcoder, OperationLifespanTimeout); var result2 = IOService.Execute(replace); Assert.IsTrue(result2.Success); //check that doc has been updated var get = new Get<dynamic>(key, GetVBucket(), Transcoder, OperationLifespanTimeout); var result3 = IOService.Execute(get); Assert.IsTrue(result3.Success); Assert.AreEqual(result3.Value.bar.Value, "bar"); }
public void Test_Timed_Execution() { var converter = new DefaultConverter(); var transcoder = new DefaultTranscoder(converter); var vbucket = GetVBucket(); int n = 1000; //set to a higher # if needed using (new OperationTimer()) { var key = string.Format("key{0}", 111); for (var i = 0; i < n; i++) { var set = new Set<int?>(key, 111, vbucket, transcoder, OperationLifespanTimeout); var get = new Get<int?>(key, vbucket, transcoder, OperationLifespanTimeout); var result = IOService.Execute(set); Assert.IsTrue(result.Success); var result1 = IOService.Execute(get); Assert.IsTrue(result1.Success); Assert.AreEqual(111, result1.Value); } } }
public void Test_Integrated_With_Common_Log() { var op = new Get<string>("key", null, _transcoder, OperationLifespan); using (new OperationTimer(TimingLevel.One, op, new CommonLogStore(Log))) { Thread.Sleep(1000); } }
public void Test_OperationResult_Returns_Defaults() { var op = new Get<string>("Key", GetVBucket(), Transcoder, OperationLifespanTimeout); var result = op.GetResultWithValue(); Assert.IsNull(result.Value); Assert.IsEmpty(result.Message); }
public void Test_OperationResult_Returns_Defaults() { var op = new Get<string>("Key", GetVBucket(), new AutoByteConverter(), new TypeSerializer(new AutoByteConverter())); var result = op.GetResult(); Assert.IsNull(result.Value); Assert.IsEmpty(result.Message); }
protected override void Because() { SourceControl.ClearDownLoadedPackages(); get = new Get(fileSystemProvider); destinationPath = get.From(sourceControl) .ExportTo(packageTree) .RetrievePackage("horn").WorkingDirectory.FullName; }
public void When_TimingLevel_Is_None_Log_Message_Contains_No_Level() { var log = new FakeLog("mylogger", LogLevel.Info, true, true, true, "yyyy/MM/dd HH:mm:ss:fff"); var op = new Get<string>("key", null, _transcoder, OperationLifespan); using (new OperationTimer(TimingLevel.None, op, new CommonLogStore(log))) { Thread.Sleep(100); } var loggedString = log.LogStore.ToString(); Assert.IsFalse(loggedString.Contains("Level")); }
public async Task<IActionResult> Get(Get.Query query) { var results = await _mediator.SendAsync(query); if (results == null) { return NotFound(); } return Ok(results); }
public void Test_ReadExtras_When_Type_Is_Binary() { var key = "binkey"; var expected = new byte[] { 0x81, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, 0x0e, 0xa2, 0x9d, 0x32, 0xdb, 0xb5, 0x03, 0x00, 0x00, 0x02, 0x01, 0x02, 0x03, 0x04 }; var get = new Get<byte[]>(key, GetVBucket(), Transcoder, OperationLifespanTimeout); get.ReadExtras(expected); Assert.AreEqual(DataFormat.Binary, get.Format); }
public void When_Type_Is_Int_DateFormat_Is_Json() { const string key = "OperationBaseTests.When_Type_Is_Int_DateFormat_Is_Json"; var set = new Set<int?>(key, 100, GetVBucket(), Transcoder, OperationLifespanTimeout); var result = IOStrategy.Execute(set); Assert.IsTrue(result.Success); Assert.AreEqual(set.Format, DataFormat.Json); var get = new Get<int>(key, GetVBucket(), Transcoder, OperationLifespanTimeout); var getResult = IOStrategy.Execute(get); Assert.IsTrue(getResult.Success); Assert.AreEqual(DataFormat.Json, get.Format); Assert.AreEqual(Compression.None, get.Compression); }
public void When_Type_Is_String_DateFormat_Is_String() { const string key = "OperationBaseTests.When_Type_Is_String_DateFormat_Is_String"; var set = new Set<string>(key, "somestring", GetVBucket(), Transcoder, OperationLifespanTimeout); var result = IOService.Execute(set); Assert.IsTrue(result.Success); Assert.AreEqual(set.Format, DataFormat.String); var get = new Get<string>(key, GetVBucket(), Transcoder, OperationLifespanTimeout); var getResult = IOService.Execute(get); Assert.IsTrue(getResult.Success); Assert.AreEqual(DataFormat.String, get.Format); Assert.AreEqual(Compression.None, get.Compression); }
/// Action generator /// @todo Implement lookup table or a design pattern for easier/automatic function generation public void actionGenerator( List<GameObject[]> combinations ) { iThinkAction action; //printEverything(combinations); foreach ( GameObject[] matrix in combinations ) { switch ( schemaElements[0] ) { case "get" : action = new Get( "Get", matrix[0], matrix[1] ); tempActionList.Add(action); break; case "buy" : action = new Buy( "Buy", matrix[0], matrix[1], matrix[2] ); tempActionList.Add(action); break; case "store" : action = new Store( "Store", matrix[0], matrix[1]); tempActionList.Add(action); break; case "hunt" : action = new Hunt( "Hunt", matrix[0], matrix[1], matrix[2], matrix[3]); tempActionList.Add(action); break; case "make" : action = new Make( "Make", matrix[0], matrix[1], matrix[2]); tempActionList.Add(action); break; case "harvest" : action = new Harvest( "Harvest", matrix[0], matrix[1], matrix[2]); tempActionList.Add(action); break; case "produce" : action = new Produce( "Produce", matrix[0], matrix[1], matrix[2]); tempActionList.Add(action); break; case "craftSpell" : action = new CraftSpell ("CraftSpell", matrix[0], matrix[1], matrix[2]); tempActionList.Add(action); break; case "craftSimpleWeapon" : action = new CraftSimpleWeapon("CraftSimpleWeapon", matrix[0], matrix[1], matrix[2]); tempActionList.Add(action); break; } } }
public void When_Key_Exists_Get_Returns_Value() { var key = "When_Key_Exists_Get_Returns_Value"; //delete the value if it exists var delete = new Delete(key, GetVBucket(), Transcoder, OperationLifespanTimeout); IOStrategy.Execute(delete); //Add the key var add = new Add<dynamic>(key, new { foo = "foo" }, GetVBucket(), Transcoder, OperationLifespanTimeout); Assert.IsTrue(IOStrategy.Execute(add).Success); var get = new Get<dynamic>(key, GetVBucket(), Transcoder, OperationLifespanTimeout); var result = IOStrategy.Execute(get); Assert.IsTrue(result.Success); var expected = new {foo = "foo"}; Assert.AreEqual(result.Value.foo.Value, expected.foo); }
public void WhenForwardMapIsAvailable_AndRevisionIsSame_OperationUsesForwardMapVBucket() { var controller = new Mock<IClusterController>(); controller.Setup(x => x.Configuration).Returns(new ClientConfiguration()); var server1 = new Mock<IServer>(); server1.Setup(x => x.Send(It.IsAny<IOperation<dynamic>>())).Returns(new OperationResult<dynamic>()); server1.Setup(x => x.EndPoint).Returns(new IPEndPoint(IPAddress.Loopback, 8091)); var server2 = new Mock<IServer>(); server2.Setup(x => x.Send(It.IsAny<IOperation<dynamic>>())).Returns(new OperationResult<dynamic>()); server2.Setup(x => x.EndPoint).Returns(new IPEndPoint(IPAddress.Parse("255.255.0.0"), 8091)); var vBucketServerMap = new VBucketServerMap { ServerList = new[] { "localhost:8901", "255.255.0.0:8091" }, VBucketMap = new[] {new[] {0}}, VBucketMapForward = new[] {new[] {1}} }; var keyMapper = new VBucketKeyMapper(new Dictionary<IPAddress, IServer> { { IPAddress.Loopback, server1.Object}, { IPAddress.Parse("255.255.0.0"), server2.Object} }, vBucketServerMap, 2, "default"); var configInfo = new Mock<IConfigInfo>(); configInfo.Setup(x => x.IsDataCapable).Returns(true); configInfo.Setup(x => x.GetKeyMapper()).Returns(keyMapper); configInfo.Setup(x => x.ClientConfig).Returns(new ClientConfiguration()); var pending = new ConcurrentDictionary<uint, IOperation>(); var executor = new CouchbaseRequestExecuter(controller.Object, configInfo.Object, "default", pending); var op = new Get<dynamic>("thekey", null, new DefaultTranscoder(), 100); op.LastConfigRevisionTried = 2; var result = executor.SendWithRetry(op); Assert.AreEqual(op.VBucket.LocatePrimary().EndPoint, keyMapper.GetVBucketsForwards().First().Value.LocatePrimary().EndPoint); }
public void Test_Observe2() { const string key = "Test_Observe2"; var remove = new Delete(key, GetVBucket(), Converter, Serializer); var set = new Set<int>(key, 10, GetVBucket(), Converter); var result = IOStrategy.Execute(set); Assert.IsTrue(result.Success); var get = new Get<dynamic>(key, GetVBucket(), Converter, Serializer); var result1 = IOStrategy.Execute(get); Assert.IsTrue(result1.Success); Assert.AreEqual(result.Cas, result1.Cas); var operation = new Observe(key, GetVBucket(), new AutoByteConverter()); var result2 = IOStrategy.Execute(operation); Assert.AreEqual(result1.Cas, result2.Value.Cas); Assert.AreEqual(KeyState.FoundPersisted, result2.Value.KeyState); Assert.IsTrue(result2.Success); }
public void When_Key_Exists_Get_Returns_Value() { var key = "When_Key_Exists_Get_Returns_Value"; //delete the value if it exists var delete = new Delete(key, GetVBucket(), new AutoByteConverter(), new TypeSerializer(new ManualByteConverter())); IOStrategy.Execute(delete); //Add the key var add = new Add<dynamic>(key, new { foo = "foo" }, GetVBucket(), new AutoByteConverter(), new TypeSerializer(new ManualByteConverter())); Assert.IsTrue(IOStrategy.Execute(add).Success); var get = new Get<dynamic>(key, GetVBucket(), new AutoByteConverter(), new TypeSerializer(new AutoByteConverter())); var result = IOStrategy.Execute(get); Assert.IsTrue(result.Success); var expected = new {foo = "foo"}; Assert.AreEqual(result.Value.foo.Value, expected.foo); }
public void When_Type_Is_String_DataFormat_String_Is_Used() { var key = "When_Type_Is_String_DataFormat_String_Is_Used"; //delete the value if it exists var delete = new Delete(key, GetVBucket(), Transcoder, OperationLifespanTimeout); IOService.Execute(delete); //Add the key var add = new Add<string>(key, "foo", GetVBucket(), Transcoder, OperationLifespanTimeout); Assert.IsTrue(IOService.Execute(add).Success); var get = new Get<string>(key, GetVBucket(), Transcoder, OperationLifespanTimeout); get.CreateExtras(); Assert.AreEqual(DataFormat.String, get.Format); var result = IOService.Execute(get); Assert.IsTrue(result.Success); Assert.AreEqual(DataFormat.String, get.Format); }
public void When_Type_Is_Object_DataFormat_Json_Is_Used() { var key = "When_Type_Is_Object_DataFormat_Json_Is_Used"; //delete the value if it exists var delete = new Delete(key, GetVBucket(), Transcoder, OperationLifespanTimeout); IOStrategy.Execute(delete); //Add the key var add = new Add<dynamic>(key, new { foo = "foo" }, GetVBucket(), Transcoder, OperationLifespanTimeout); Assert.IsTrue(IOStrategy.Execute(add).Success); var get = new Get<dynamic>(key, GetVBucket(), Transcoder, OperationLifespanTimeout); get.CreateExtras(); Assert.AreEqual(DataFormat.Json, get.Format); var result = IOStrategy.Execute(get); Assert.IsTrue(result.Success); Assert.AreEqual(DataFormat.Json, get.Format); }
public void When_Type_Object_Int_DateFormat_Is_Json() { const string key = "OperationBaseTests.When_Type_Object_Int_DateFormat_Is_Json"; var value = new { Name = "name", Foo = "foo" }; var set = new Set<dynamic>(key, value, GetVBucket(), Transcoder, OperationLifespanTimeout); var result = IOService.Execute(set); Assert.IsTrue(result.Success); Assert.AreEqual(set.Format, DataFormat.Json); var get = new Get<dynamic>(key, GetVBucket(), Transcoder, OperationLifespanTimeout); var getResult = IOService.Execute(get); Assert.IsTrue(getResult.Success); Assert.AreEqual(DataFormat.Json, get.Format); Assert.AreEqual(Compression.None, get.Compression); }
public void Test_IncrementOperation() { const string key = "Test_IncrementOperation"; var delete = new Delete(key, GetVBucket(), Converter, Serializer); var result = IOStrategy.Execute(delete); Console.WriteLine("Deleting key {0}: {1}", key, result.Success); var increment = new Increment(key, 0, 1, 0, GetVBucket(), Converter, Serializer); var result1 = IOStrategy.Execute(increment); Assert.IsTrue(result1.Success); Assert.AreEqual(result1.Value, uint.MinValue); var result2 = IOStrategy.Execute(increment); Assert.IsTrue(result2.Success); Assert.AreEqual(1, result2.Value); var getOperation = new Get<string>(key, GetVBucket(), Converter, Serializer); var result3 = IOStrategy.Execute(getOperation); var value = result3.Value; Assert.AreEqual(result2.Value.ToString(CultureInfo.InvariantCulture), result3.Value); }
public async Task Test_Observe2() { const string key = "Test_Observe2"; var remove = new Delete(key, GetVBucket(), Transcoder, OperationLifespanTimeout); var set = new Set<int?>(key, 10, GetVBucket(), Transcoder, OperationLifespanTimeout); var result = IOService.Execute(set); Assert.IsTrue(result.Success); var get = new Get<dynamic>(key, GetVBucket(), Transcoder, OperationLifespanTimeout); var result1 = IOService.Execute(get); Assert.IsTrue(result1.Success); Assert.AreEqual(result.Cas, result1.Cas); await Task.Delay(100); var operation = new Observe(key, GetVBucket(), Transcoder, OperationLifespanTimeout); var result2 = IOService.Execute(operation); Assert.AreEqual(result1.Cas, result2.Value.Cas); Assert.AreEqual(KeyState.FoundPersisted, result2.Value.KeyState); Assert.IsTrue(result2.Success); }
public void Test_Timed_Execution_Parallel() { var options = new ParallelOptions { MaxDegreeOfParallelism = 4 }; var converter = new AutoByteConverter(); var serializer = new TypeSerializer(converter); var vbucket = GetVBucket(); var n = 1000;//set to a higher # if needed using (new OperationTimer()) { Parallel.For(0, n, options, i => { var key = string.Format("key{0}", i); var set = new Set<int>(key, i, vbucket, converter); var result = IOStrategy.Execute(set); Assert.IsTrue(result.Success); var get = new Get<int>(key, vbucket, converter, serializer); var result1 = IOStrategy.Execute(get); Assert.IsTrue(result1.Success); Assert.AreEqual(i, result1.Value); }); } }
public void Test_Timed_Execution_Parallel() { var options = new ParallelOptions { MaxDegreeOfParallelism = 4 }; var converter = new DefaultConverter(); var transcoder = new DefaultTranscoder(converter); var vbucket = GetVBucket(); var n = 1000;//set to a higher # if needed using (new OperationTimer()) { Parallel.For(0, n, options, i => { var key = string.Format("key{0}", i); var set = new Set<int?>(key, i, vbucket, transcoder, OperationLifespanTimeout); var result = IOService.Execute(set); Assert.IsTrue(result.Success); var get = new Get<int?>(key, vbucket, transcoder, OperationLifespanTimeout); var result1 = IOService.Execute(get); Assert.IsTrue(result1.Success); Assert.AreEqual(i, result1.Value); }); } }
public void Test_Timed_Execution() { var converter = new AutoByteConverter(); var serializer = new TypeSerializer(converter); var vbucket = GetVBucket(); int n = 1000; //set to a higher # if needed using (new OperationTimer()) { var key = string.Format("key{0}", 111); var set = new Set<int>(key, 111, vbucket, converter); var get = new Get<int>(key, vbucket, converter, serializer); for (var i = 0; i < n; i++) { var result = IOStrategy.Execute(set); Assert.IsTrue(result.Success); var result1 = IOStrategy.Execute(get); Assert.IsTrue(result1.Success); Assert.AreEqual(111, result1.Value); } } }
static void Main(string[] args) { Title = "OwO What's This? Loading bulge..."; Configuration.Load(); SetOut(new Writer()); C.WriteLine("Configuration loaded!"); Title = "OwO Bot " + Constants.Version; Args = args; int argumentIndexSub = 0; if (args.Length > 0) { if (int.TryParse(args[0], out argumentIndexSub)) { C.WriteLine("Found valid argument for subreddit!"); } } int argumentIndexMail = 0; if (args.Length > 1) { if (int.TryParse(args[1], out argumentIndexMail)) { C.WriteLine("Found valid argument for Email!"); EmailRecipient = Config.mail.reciever[argumentIndexMail]; } } else { C.WriteLine("Using default mailer!"); EmailRecipient = Config.mail.reciever[argumentIndexMail]; } #region Temporary method for populating database with titles. //using (DbPosts p = new DbPosts()) //{ // var allPosts = p.GetAllPosts(); // foreach (Misc.PostRequest s in allPosts) // { // if (string.IsNullOrEmpty(s.Title)) // { // var redd = Get.Reddit(); // Post sss = (Post)redd.GetThingByFullname($"t3_{s.RedditPostId}"); // p.SetTitle(s.E621Id, sss.Title); // } // } //} #endregion #region Temporary method for populating colorschemes //using (DbPosts p = new DbPosts()) //{ // var noColorScheme = p.GetWithNoColorScheme(); // var colorThiefc = new ColorThief(); // foreach (var r in noColorScheme) // { // string thumbUrlc = Html.FindThumbnail(r.ResultUrl); // Bitmap ac = new Bitmap(Html.GetImageFromUrl(thumbUrlc)); // var color = colorThiefc.GetColor(ac); // p.UpdateColorScheme(r.Id, color.Color.ToHexString()); // } //} #endregion if (argumentIndexSub == -1) { DatabaseManagement(); } var subConfig = Config.subreddit_configurations[argumentIndexSub]; WorkingSub = subConfig.subreddit; string requestSite = subConfig.issafe ? "e926" : "e621"; C.WriteLine($"Running for /r/{subConfig.subreddit}!"); string saveTags = $"{subConfig.tags} date:>={DateTime.Now.AddDays(-1):yyyy-MM-dd}"; WebClient = new WebClient { Headers = { ["User-Agent"] = $"OwO Bot/{Constants.Version} (by BitzLeon on Reddit)" } }; HttpClient = new HttpClient(); HttpClient.DefaultRequestHeaders.Add("User-Agent", $"OwO Bot/{Constants.Version} (by BitzLeon on Reddit)"); int page = 1; List <P> searchObject = new List <P>(); List <Blacklist> blacklist; using (DbBlackList dbBlackList = new DbBlackList()) { blacklist = dbBlackList.GetAllIds(WorkingSub); } while (searchObject.Count == 0) { string result = string.Empty; try { result = WebClient.DownloadString($"https://{requestSite}.net/posts.json?tags={saveTags}&limit=50&page=" + page); } catch (WebException) { C.WriteLine("No search results found."); Environment.Exit(2); } var response = JsonConvert.DeserializeObject <E621Search>(result); if (response?.Posts != null) { var temp = response.Posts; searchObject.AddRange(temp); searchObject = searchObject.Distinct().ToList(); } //Hide tags that we were unable to hide earlier because of the 6 tag limit, generally, things that aren't "furry" per se. string[] hideTags = subConfig.hide.Split(' ').Select(x => x.Trim()) .Where(x => !string.IsNullOrWhiteSpace(x)) .ToArray(); //Filetype filtering searchObject = searchObject.Where(results => results.File.Ext != "swf").ToList(); //Hard filtering searchObject = searchObject.Where(results => !TagsToHide.Any(tagsToHide => results.Tags.MasterList.Contains(tagsToHide))).ToList(); //Soft filtering searchObject = searchObject.Where(results => !hideTags.Any(tagsToHide => results.Tags.MasterList.Contains(tagsToHide))).ToList(); //Blacklist filtering searchObject = searchObject.Where(r => !blacklist.Select(x => x.PostId).Contains(r.Id)).ToList(); page++; } Reddit reddit = Get.Reddit(); if (reddit.User.FullName.ToLower() != Config.reddit.username.ToLower()) { C.WriteLine("Unable to verify Reddit login details. Ensure ALL your credentials are correct."); Environment.Exit(2); } Subreddit subreddit = reddit.GetSubreddit(subConfig.subreddit); C.WriteLine("Getting most recent posts..."); //2 days back should be fine //Get all the posts from reddit. var newPosts = subreddit.New.Where(x => !x.IsSelfPost && x.Created >= DateTimeOffset.Now.AddDays(-2)).ToList(); DbSubredditPosts dbSubredditConnection = new DbSubredditPosts(); //Clean up old posts. No reason to keep them in here. C.WriteLine($"Deleteing all Posts older than {Config.reddit.Check_Back_X_Days} days..."); C.WriteLine($"{dbSubredditConnection.DeleteAllPostsOlderThan(Config.reddit.Check_Back_X_Days)} Posts deleted!"); //Get all post Ids from database. We don't want to grb the entire blob yet- those are a bit heavy! List <ImgHash> dbPostIds = dbSubredditConnection.GetAllIds(); //Remove all intersecting items. If we find it in the database, we don't need to recalculate the hash. newPosts = newPosts.Where(x => dbPostIds.All(d => x.Id != d.PostId)).ToList(); C.WriteLine($"Grabbed {newPosts.Count} to compare. Converting to hashes..."); string defaultTitle = Title; int progressCounter = 0; int totalPosts = newPosts.Count; Title = $"{defaultTitle} [{progressCounter}/{totalPosts}]"; foreach (var newPost in newPosts) { progressCounter++; var timer = new Stopwatch(); timer.Start(); Write($"Working on {newPost.Id}..."); ImgHash thisPair = F.Hashing.FromPost(newPost); if (thisPair.IsValid) { if (dbSubredditConnection.AddPostToDatabase(thisPair)) { C.WriteLineNoTime("Added to database..."); } } timer.Stop(); C.WriteLineNoTime($"Done in {timer.ElapsedMilliseconds}ms!"); Title = progressCounter > totalPosts ? $"{defaultTitle} [DONE!]" : $"{defaultTitle} [{progressCounter}/{totalPosts}]"; } Title = defaultTitle; List <ImgHash> dbPosts = dbSubredditConnection.GetAllValidPosts(); dbSubredditConnection.Dispose(); //Close the connection. Don't need to keep it open anymore. dbPosts = dbPosts.Where(x => x.SubReddit.ToLower() == subConfig.subreddit.ToLower()).ToList(); P imageToPost = null; foreach (P searchResult in searchObject) { bool isUnique = true; byte[] currentImageHash = F.Hashing.GetHash(searchResult.File.Url.ToString()); foreach (ImgHash imgHash in dbPosts) { double equivalence = F.Hashing.CalculateSimilarity(currentImageHash, imgHash.ImageHash); if (equivalence > 0.985) { if (String.Equals(subConfig.subreddit, imgHash.SubReddit, StringComparison.OrdinalIgnoreCase)) { C.WriteLine($"Found equivalency of {equivalence:P1}."); C.WriteLine("Image was posted on this sub already."); isUnique = false; break; } } } if (isUnique) { imageToPost = searchResult; break; } } if (imageToPost == null) { C.WriteLine("No image found to post..."); Environment.Exit(0); } else { C.WriteLine("Found an image to post! Lets start doing things..."); } Misc.PostRequest request = new Misc.PostRequest { Description = imageToPost.Description, RequestUrl = imageToPost.File.Url.ToString(), RequestSize = imageToPost.File.Size, IsNsfw = imageToPost.Rating == "e", E621Id = imageToPost.Id, Subreddit = WorkingSub }; //Properly recycle data if we are going to be reposting something from another sub. DbPosts dboPosts = new DbPosts(); var uploadedCheck = dboPosts.GetPostData(imageToPost.Id); if (uploadedCheck.Count == 0) { C.Write("Building title..."); request.Title = GenerateTitle(imageToPost); C.WriteLineNoTime("Done!"); UploadImage(imageToPost, ref request); } else { var first = uploadedCheck.First(); request.Title = first.Title; request.ResultUrl = first.ResultUrl; } C.Write("Posting to Reddit..."); try { Post post = subreddit.SubmitPost(request.Title, request.ResultUrl); if (request.IsNsfw) { post.MarkNSFW(); } C.WriteLineNoTime("Done!"); request.DatePosted = DateTime.Now; C.Write("Commenting on Post..."); string parsedSource; if (imageToPost.Sources != null && imageToPost.Sources.Count > 0) { parsedSource = $"[Original Source]({imageToPost.Sources.FirstOrDefault()})"; } else { parsedSource = "No source provided"; } string parsede621Source = $"[{requestSite} Source](https://{requestSite}.net/posts/{imageToPost.Id})"; string creditsFooter; if (MailBasedTitle) { creditsFooter = !string.IsNullOrEmpty(EmailRecipient.username) ? $"/u/{EmailRecipient.username}" : "a helpful user"; } else { creditsFooter = "Artist"; } string comment = $"{parsedSource} | {parsede621Source} " + "\r\n" + "\r\n" + "---" + "\r\n" + "\r\n" + $"Title by {creditsFooter} | This is a bot | [Discord](https://discordapp.com/invite/gz9sn7r) | [Twitter](https://twitter.com/twisty_plot) | [Report problems](/message/compose/?to=BitzLeon&subject={Uri.EscapeUriString($"OwO Bot {Constants.Version} post {post.Url}")}) | [Source code](https://github.com/Bitz/OwO_Bot)"; post.Comment(comment); request.RedditPostId = post.Id; Blacklist imageData = new Blacklist { PostId = imageToPost.Id, CreatedDate = DateTime.Now, Subreddit = WorkingSub }; try { var colorThief = new ColorThief(); string thumbUrl = Html.FindThumbnail(request.ResultUrl); Bitmap a = new Bitmap(Html.GetImageFromUrl(thumbUrl)); request.ColorScheme = colorThief.GetColor(a).Color.ToHexString(); } catch (Exception) { //Ignore } //instate a reusable connection rather than a 1 off object. using (DbConnector dbConnector = new DbConnector()) { //Saved to prevent rechecking. DbBlackList blacklistdb = new DbBlackList(dbConnector); blacklistdb.AddToBlacklist(imageData); //Saved for later use maybe. DbPosts dbPostsFinalSave = new DbPosts(dbConnector); dbPostsFinalSave.AddPostToDatabase(request); } } catch (DuplicateLinkException) { using (DbConnector dbConnector = new DbConnector()) { Blacklist imageData = new Blacklist { PostId = imageToPost.Id, CreatedDate = DateTime.Now, Subreddit = WorkingSub }; //Saved to prevent rechecking. DbBlackList blacklistdb = new DbBlackList(dbConnector); blacklistdb.AddToBlacklist(imageData); } Process.Start(Assembly.GetExecutingAssembly().Location, Args.FirstOrDefault()); Environment.Exit(0); } C.WriteLineNoTime("Done!"); }
public async Task UpdateDb() { var delOptions = new RequestOptions { Timeout = 2 }; await Context.Message.DeleteAsync(delOptions); var system = new[] { "xbox", "psn" }; var seasonCount = system.Select(s => new ConsoleInformation { System = s, CurrentSeason = int.Parse(GetCurrentSeason.GetSeason(s)), PreviousSeason = int.Parse(GetPreviousSeason.GetPrevious(s)), NumberOfSeasons = Math.Abs(int.Parse(GetCurrentSeason.GetSeason(s)) - int.Parse(GetPreviousSeason.GetPrevious(s)) + 1) }).ToList(); var options = new ProgressBarOptions { ForegroundColorDone = ConsoleColor.DarkBlue, ForegroundColor = ConsoleColor.Yellow, BackgroundColor = ConsoleColor.Gray, BackgroundCharacter = '\u2593', ShowEstimatedDuration = true, DisplayTimeInRealTime = false, CollapseWhenFinished = false }; var childOptions = new ProgressBarOptions { ForegroundColor = ConsoleColor.Green, BackgroundColor = ConsoleColor.DarkGreen, ProgressCharacter = '\u2593', CollapseWhenFinished = false, DisplayTimeInRealTime = false }; Log.Logger.Warning("Running Weekly Update."); try { if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { foreach (var t in seasonCount) { var currentSeason = LeagueInfo.GetSeason(t.System); await Context.Channel.SendMessageAsync($"Starting update for {t.System.ToUpper()}.").ConfigureAwait(false); foreach (var leagueProp in currentSeason) { for (var j = int.Parse(leagueProp.Season); j >= 1; j--) { Get.GetPlayerIds(t.System, "player", j); //await chnl.SendMessageAsync( // $"Ran Season {j} Update for {t.System.ToUpper()}. Remaining: {j}/{t.NumberOfSeasons}"); } await Context.Channel.SendMessageAsync($"Update for {t.System.ToUpper()} completed."); break; } } } else { foreach (var t in seasonCount) { await Context.Channel.SendMessageAsync($"Starting update for {t.System.ToUpper()}.").ConfigureAwait(false); using var pbar = new ProgressBar(t.NumberOfSeasons, $"Running Database Update {t.System}", options); var currentSeason = LeagueInfo.GetSeason(t.System); foreach (var leagueProp in currentSeason) { for (var j = int.Parse(leagueProp.Season); j >= 1; j--) { pbar.EstimatedDuration = TimeSpan.FromMilliseconds(t.NumberOfSeasons * 5000); pbar.Tick( $"Running Season {j} Update for {t.System.ToUpper()}. Remaining: {j}/{leagueProp.Season}"); Get.GetPlayerIds(t.System, "player", j, pbar); //await chnl.SendMessageAsync( // $"Ran Season {j} Update for {t.System.ToUpper()}. Remaining: {j}/{t.NumberOfSeasons}"); Thread.Sleep(250); } await Context.Channel.SendMessageAsync($"Update for {t.System.ToUpper()} completed."); var estimatedDuration = TimeSpan.FromSeconds(60 * seasonCount.Count) + TimeSpan.FromSeconds(30 * t.NumberOfSeasons); pbar.Tick(estimatedDuration, $"Completed {t.System} updated"); break; } } } } catch (Exception e) { Console.WriteLine(e); throw; } }
private static Get FetchUserById(int id) { return(Get.ResourceAt($"api/Users/{id}")); }
/// <summary> /// Produces a query to delete a record from a table. /// </summary> /// <param name="id">The id which should be deleted.</param> /// <param name="tableName">The name of the table which will be operated on.</param> /// <param name="idPropertyName">The name of the id field.</param> /// <returns><see cref="IAliasedCommandTypeDataOrder"/> containing the query, parents, and aliases.</returns> public static IAliasedCommandTypeDataOrder DeleteSingleId(int id, string tableName, string idPropertyName) { Clause whereClause = Clause.New().AddClause($"@id{Get.SafeGuid()}", id, Clause.EqualStatementCallback(idPropertyName)); return(new AliasedCommandTypeDataOrder(Get.DeleteQuery(tableName, whereClause), CommandType.Text)); }
public async Task DerpiLuckyMulti(int num, [Remainder] string search) { // Broadcasts "User is typing..." message to Discord channel. await Context.Channel.TriggerTypingAsync(); // Limit ~lucky amounts. if (num < 1 || num > 5) { await ReplyAsync("You need to pick a number bigger than 0 and no more than 5"); return; } // Set up the base query parameters. // Sorted randomly, gets "num" amount of items! Dictionary <string, string> queryParams = new Dictionary <string, string>() { { "filter_id", "178065" }, { "sf", "random" }, { "sd", "desc" }, { "per_page", num.ToString() }, { "page", "1" }, }; // If the channel is not on the list of NSFW enabled channels do not allow NSFW results. // the second part checks if the command was executed in DMS, DM channels do not have to be added to the NSFW enabled list. // In DMs the first check will fail, and so will the second, allowing for nsfw results to be displayed. bool safeOnly = !DBTransaction.isChannelWhitelisted(Context.Channel.Id) && !Context.IsPrivate; // Add search to the parameters list, with "AND safe" if it failed the NSFW check. queryParams.Add("q", safeOnly ? $"{search}+AND+safe" : search); // Build the full request URL. string requestUrl = DerpiHelper.BuildDerpiUrl(this.baseURL, queryParams); // Deserialize (from JSON to DerpibooruResponse.RootObject) the Derpibooru search results. DerpiRoot DerpiResponse = JsonConvert.DeserializeObject <DerpiRoot>(Get.Derpibooru(requestUrl).Result); // Actual request an. Try-catch to softly catch exceptions. try { if (DerpiResponse.images.Count == 0) { await ReplyAsync("No results! The tag may be misspelled, or the results could be filtered out due to channel!"); return; } else if (DerpiResponse.images.Count < num) { await ReplyAsync($"Not enough results to post {num}, but here is what we have found!"); } // Print all results of the search! // Sorted randomly by Derpibooru already, and will be between 1-5 elements. string message = $"Listing {DerpiResponse.images.Count} results\n"; message += String.Join("\n", DerpiResponse.images.Select( element => element.representations.full)); await ReplyAsync(message); } catch { await ReplyAsync("Sorry! Something went wrong, your search terms are probably incorrect."); return; } }
/// <summary> /// 获取成员信息 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <param name="code">通过员工授权获取到的code,每次员工授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期</param> /// <param name="agentId">跳转链接时所在的企业应用ID</param> /// 权限说明:管理员须拥有agent的使用权限;agentid必须和跳转链接时所在的企业应用ID相同。 /// <returns></returns> public static GetUserInfoResult GetUserId(string accessToken, string code, int agentId) { var url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={0}&code={1}&agentid={2}", accessToken, code, agentId); return(Get.GetJson <GetUserInfoResult>(url)); }
public async Task <TblUser> FindByPhoneNumberAsync(string phoneNumber) { return(await Get.Where(a => a.PhoneNumber == phoneNumber).SingleOrDefaultAsync()); }
/// <summary> /// 【异步方法】获取企业号应用信息 /// </summary> /// <param name="accessToken"></param> /// <param name="agentId">企业应用的id,可在应用的设置页面查看</param> /// <param name="timeOut">代理请求超时时间(毫秒)</param> /// <returns></returns> public static async Task <GetAppInfoResult> GetAppInfoAsync(string accessToken, int agentId, int timeOut = Config.TIME_OUT) { string url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/agent/get?access_token={0}&agentid={1}", accessToken.AsUrlData(), agentId.ToString("d").AsUrlData()); return(await Get.GetJsonAsync <GetAppInfoResult>(url)); }
/// <summary> /// 【异步方法】二次验证 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <param name="userId">员工UserID</param> /// <returns></returns> public static async Task <QyJsonResult> TwoVerificationAsync(string accessToken, string userId) { var url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/user/authsucc?access_token={0}&userid={1}", accessToken.AsUrlData(), userId.AsUrlData()); return(await Get.GetJsonAsync <QyJsonResult>(url)); }
public IActionResult ManageTeachers() { ManageTeachersViewModel manageTeachersViewModel = new Get().ManageTeachers(); return(View(manageTeachersViewModel)); }
/// <summary> /// 获取成员信息 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <param name="code">通过员工授权获取到的code,每次员工授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期</param> /// 权限说明:管理员须拥有agent的使用权限;agentid必须和跳转链接时所在的企业应用ID相同。 /// <returns></returns> public static GetUserInfoResult GetUserId(string accessToken, string code) { var url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={0}&code={1}", accessToken.AsUrlData(), code.AsUrlData()); return(Get.GetJson <GetUserInfoResult>(url)); }
public AlarmPanel() : base(Resources.Uri(AssemblyData.ShortName(), "/Images/Music.png")) { Get.Current <Options>().Alarm.Initialize(); }
public int GetRowsCount() => Get.CountOfElements(RowScss, FrameBy);
private void OnGetPredictors(Get <IHas <IPredictionLogic> > request) { request.Elements = predictors.ToList(); }
/// <summary> /// 获取微信服务器的ip段 /// </summary> /// <param name="accessToken"></param> /// <returns></returns> public static GetCallBackIpResult GetCallBackIp(string accessToken) { var url = string.Format(Config.ApiWorkHost + "/cgi-bin/getcallbackip?access_token={0}", accessToken.AsUrlData()); return(Get.GetJson <GetCallBackIpResult>(url)); }
public static IObservable <T> DecorateWithTime <T>(this IObservable <T> source) { return(source.Do(i => { Get.Now(); })); }
public async Task ShouldGetRange() { using (var server = CreateServer()) { IAppDbContext context = server.Host.Services.GetService(typeof(IAppDbContext)) as IAppDbContext; var dashboard = default(Dashboard); context.Dashboards.Add(dashboard = new Dashboard() { Name = "Default", ProfileId = 1 }); context.DashboardCards.Add(new DashboardCard() { CardId = 2, Dashboard = dashboard, Options = JsonConvert.SerializeObject(new DashboardCardApiModel.OptionsApiModel() { Top = 1, Left = 1, Width = 1, Height = 1 }) }); context.DashboardCards.Add(new DashboardCard() { CardId = 3, Dashboard = dashboard, Options = JsonConvert.SerializeObject(new DashboardCardApiModel.OptionsApiModel() { Top = 1, Left = 1, Width = 1, Height = 1 }) }); context.DashboardCards.Add(new DashboardCard() { CardId = 1, Dashboard = dashboard, Options = JsonConvert.SerializeObject(new DashboardCardApiModel.OptionsApiModel() { Top = 1, Left = 1, Width = 1, Height = 1 }) }); await context.SaveChangesAsync(default(CancellationToken)); var response = await server.CreateClient() .GetAsync <GetDashboardCardByIdsQuery.Response>(Get.DashboardCardByIds(new List <int>() { 1, 2 })); Assert.True(response.DashboardCards.Count() == 2); } }
public virtual void GetHandler(Get get) { get.ResponsePort.Post(_state); }
public virtual IEnumerator <ITask> GetAccelerometerHandler(Get get) { get.ResponsePort.Post(_state); yield break; }
// "Master" Derpibooru/~derpi searching method. Not a discord-accessible method. private async Task DerpiMaster(bool artistAsLink, int Sort, string search) { // Broadcasts "User is typing..." message to Discord channel. await Context.Channel.TriggerTypingAsync(); // Validate that a valid sorting option was chosen. if (Sort < 0 || Sort >= this.sortingOptions.Length) { await ReplyAsync("Invalid sorting option: " + Sort + ". Please try again"); return; } // Choose sorting method from the available list. string sortParam = this.sortingOptions[Sort]; // Set up the base query parameters. // "q" is our search terms // "filter_id" is the filter against content banned by Discord TOS. Dictionary <string, string> queryParams = new Dictionary <string, string>() { { "filter_id", "178065" }, { "sf", sortParam }, { "sd", "desc" }, { "per_page", "50" }, { "page", "1" }, }; // If the channel is not on the list of NSFW enabled channels do not allow NSFW results. // the second part checks if the command was executed in DMS, DM channels do not have to be added to the NSFW enabled list. // In DMs the first check will fail, and so will the second, allowing for nsfw results to be displayed. bool safeOnly = !DBTransaction.isChannelWhitelisted(Context.Channel.Id) && !Context.IsPrivate; // Add search to the parameters list, with "AND safe" if it failed the NSFW check. queryParams.Add("q", safeOnly ? $"{search}+AND+safe" : search); // Build the full request URL. string requestUrl = DerpiHelper.BuildDerpiUrl(this.baseURL, queryParams); // Global.DerpiSearchCache is a dictionary-based cache with the last search result in that channel, if applicable. // Always stores results globally for other commands like ~next to keep track. Global.DerpiSearchCache[Context.Channel.Id] = Get.Derpibooru(requestUrl).Result; // Deserialize (from JSON to DerpibooruResponse.RootObject) the Derpibooru search results. DerpiRoot DerpiResponse = JsonConvert.DeserializeObject <DerpiRoot>(Global.DerpiSearchCache[Context.Channel.Id]); // Actual request an. Try-catch to softly catch exceptions. try { // Convert Search Array to a List, to use List functionality. List <DerpiSearch> imageList = DerpiResponse.images; if (imageList.Count == 0) { await ReplyAsync("No results! The tag may be misspelled, or the results could be filtered out due to channel!"); return; } // Get random number generator and random entry. var rng = new Random(); int rand = rng.Next(imageList.Count); Global.DerpibooruSearchIndex[Context.Channel.Id] = rand + 1; DerpiSearch randomElement = imageList.ElementAt(rand); // Add image ID to Global.links. // TODO: Describe where this is used better? Global.LastDerpiID[Context.Channel.Id] = randomElement.id.ToString(); RestUserMessage msg = await Context.Channel.SendMessageAsync( DerpiHelper.BuildDiscordResponse(randomElement, artistAsLink, !safeOnly) ); await msg.AddReactionAsync(new Emoji("▶")); //set random info for running ~enext through emoji reactions. Global.derpiContext[Context.Channel.Id] = Context; Global.derpiMessageToTrack[Context.Channel.Id] = msg.Id; } catch { await ReplyAsync("Sorry! Something went wrong, your search terms are probably incorrect."); return; } }
public GetTests() { MOutput = new Mock <IOutput>(); Ctrl = new Get(MOutput.Object); }
/// <summary> /// Get query that can be used to copy all wanted fields into new records. /// </summary> /// <typeparam name="TModelAbstraction">The abstraction which contains metadata for the table.</typeparam> /// <typeparam name="TModelImplementation">The implementation of the abstraction to be used as an intermediary.</typeparam> /// <param name="order">The information for the query.</param> /// <param name="clauseCallback">The method that will produce the clause for the query.</param> /// <param name="wrapInTransaction">Whether to wrap in transaction or not.</param> /// <returns><see cref="IAliasedCommandTypeDataOrder"/> containing the query, parents, and aliases.</returns> public static IAliasedCommandTypeDataOrder GetRecordCopyQuery <TModelAbstraction, TModelImplementation>(RecordCopyOrder <TModelImplementation> order, Func <RecordCopyClauseCallbackOrder, Clause> clauseCallback, bool wrapInTransaction = true) where TModelImplementation : TModelAbstraction { // Ascertain types in order to use reflection. Type abstractionType = typeof(TModelAbstraction); Type implementationType = typeof(TModelImplementation); // This dictionary gets the meta data of the abstract type. Missing some of these will cause an exception. Dictionary <Type, string> metaDataDictionary = MetaDataOperations.GetMetaDataNames(abstractionType); // Get table name from meta data. string tableName = metaDataDictionary .First(dict => dict.Key == typeof(TableNameAttribute)) .Value; // Get id set for use in filtering clause. KeyValuePair <string, object>[] idSet = order .TransferKeys .Select((r, index) => new KeyValuePair <string, object>(Clause.GenerateParameterName(), r)) .ToArray(); // Produce a dictionary that has the values pulled in from the DefaultModel supplied through parameter. // Key => Name of field which should match property name. // Value => KeyValuePair where Key => ParameterName, Value => value of property. Dictionary <string, KeyValuePair <string, object> > defaultValues = new[] { metaDataDictionary[typeof(CreatorAttribute)], metaDataDictionary[typeof(DateCreatedAttribute)], order.ParentIdName, } .Concat(order.DefaultFieldsToCopy) .Where(field => field != metaDataDictionary[typeof(IdAttribute)] && field != metaDataDictionary[typeof(UpdatorAttribute)] && field != metaDataDictionary[typeof(DateUpdatedAttribute)]) .Distinct() .ToDictionary(field => field, field => new KeyValuePair <string, object>(Clause.GenerateParameterName(), implementationType.GetProperty(field).GetValue(order.DefaultModel))); // Identify fields that should not be copied from record to record. // Use these fields to produce a list of fields not containing these fields. string[] unwantedFields = metaDataDictionary .Where(dict => dict.Key != typeof(TableNameAttribute)) .Select(dict => dict.Value) .Concat(defaultValues.Select(value => value.Key)) .Distinct() .ToArray(); string[] fieldsToCopy = abstractionType.GetProperties().Where(prop => unwantedFields.Contains(prop.Name) == false).Select(prop => prop.Name).OrderBy(field => field).ToArray(); // A collection of field names, with accompanying parameters are produced. Tuple <string, string>[] fieldParameterNameTupleCollection = defaultValues.Select(value => Tuple.Create(value.Key, value.Value.Key)).ToArray(); // Here is a callback that can be used to produce the clause that filters the records to be copied. Clause tempTableClause = clauseCallback(new RecordCopyClauseCallbackOrder(idSet.Select(id => Tuple.Create(id.Key, id.Value)), fieldParameterNameTupleCollection)); // Get the record copy query, assemble parameters, and return. ISimpleDataOrder transferQuery = Get.RecordCopyQuery(tableName, metaDataDictionary[typeof(IdAttribute)], tempTableClause, fieldParameterNameTupleCollection, fieldsToCopy); var parameters = transferQuery .Parameters .Concat(defaultValues.Select(value => value.Value)) .Concat(idSet) .OrderBy(pair => pair.Key); string query = wrapInTransaction ? SurroundQueryWithTransaction(transferQuery.Query) : transferQuery.Query; return(new AliasedCommandTypeDataOrder(query, CommandType.Text, parameters)); }
public Sprite GetObject(Area map, Predicate <Sprite> p, Get selections) { return(GetObjects(map, p, selections).FirstOrDefault()); }
/// <summary> /// 获取应用概况列表 /// </summary> /// <param name="accessToken"></param> /// <param name="timeOut">代理请求超时时间(毫秒)</param> /// <returns></returns> public static GetAppListResult GetAppList(string accessToken, int timeOut = Config.TIME_OUT) { string url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/agent/list?access_token={0}", accessToken.AsUrlData()); return(Get.GetJson <GetAppListResult>(url)); }
private void CreateCsvFile(FileInfo tempDirectory, string filename, FileInfo fileInfo, StringBuilder headers, FileInfo serverPathAndFile, FileInfo serverPath, string languageEncoding) { int stepId = PropertyExporterLogger.AddStep(); try { //CoreDataLibrary.Data.Process.ExportItemToXml(ExportItem, serverPathAndFile); //CsvToXmlParser xmlParser = new CsvToXmlParser(serverPathAndFile); string line; if (File.Exists(tempDirectory + filename + TEMPFILE_APPENDING)) { File.Delete(tempDirectory + filename + TEMPFILE_APPENDING); } StreamWriter writer = null; StreamReader reader = null; FileStream fs = new FileStream(tempDirectory + fileInfo.Name, FileMode.Open); FileStream outStream = new FileStream(tempDirectory + filename + TEMPFILE_APPENDING, FileMode.Append); reader = new StreamReader(fs, Encoding.Default); string encoding = Get.GetLanguageEncoding(languageEncoding); if (String.IsNullOrEmpty(encoding)) { writer = new StreamWriter(outStream, Encoding.GetEncoding("windows-1252")); } else { writer = new StreamWriter(outStream, Encoding.GetEncoding(encoding)); } writer.WriteLine(headers); string[] stringSeperators = { "(!!!!!!!!!!)" }; string[] fieldSeperators = { "!|!" }; string lastEntry = ""; while ((line = reader.ReadLine()) != null) { string[] lines = line.Split(stringSeperators, StringSplitOptions.RemoveEmptyEntries); if (lines.Length > 0) { for (int i = 0; i <= lines.Length - 1; i++) { if (lines[i].Split(fieldSeperators, StringSplitOptions.None).Length - 1 == headers.ToString().Split('|').Length - 1) { string row = lines[i].Replace("!|!", "|"); writer.WriteLine(row); } else { lastEntry = lastEntry + lines[i]; if (lastEntry.Split(fieldSeperators, StringSplitOptions.None).Length - 1 == headers.ToString().Split('|').Length - 1) { lastEntry = lastEntry.Replace("!|!", "|"); writer.WriteLine(lastEntry); lastEntry = ""; } } } } } writer.Flush(); reader.Close(); writer.Close(); string pathAndFileToFtp = ""; File.Delete(tempDirectory + fileInfo.Name); if (File.Exists(serverPathAndFile.FullName)) { File.Delete(serverPathAndFile.FullName); } File.Move(tempDirectory + filename + TEMPFILE_APPENDING, serverPathAndFile.FullName); pathAndFileToFtp = ExportItem.ExportItemName + ".csv"; File.Delete(tempDirectory + filename + TEMPFILE_APPENDING); if (CoreDataLib.IsLive()) { if (ExportItem.ExportItemFtpId > 0) { FtpExportedFile(pathAndFileToFtp); } } PropertyExporterLogger.EndStep(stepId); } catch (Exception exception) { PropertyExporterLogger.EndStep(stepId, exception); } }
/// <summary> /// Builds a Discord Embed object to return that describes the character given. /// </summary> /// <param name="fc">The Battle.Net character to build the embed for.</param> /// <returns>The newly created embed.</returns> private async Task <Embed> BuildCharacterEmbed(Character fc) { // some helper strings. const string not_applicable = "*N/A*"; const string wowprogress_base = "https://www.wowprogress.com/character/us"; bool male = fc.gender == 0; string he_she = male ? "He" : "She"; //string his_her = male ? "His" : "Her"; //string leg_s = fc.items.legendaryItemCount == 1 ? "" : "s"; // use title/url as wowprogress link string char_title = $"{fc.name} on {fc.realm}"; // the 'one line' description string description = $"{fc.raceSide.ToDiscordEmoji()}{fc.className.ToDiscordEmoji()}{he_she} is a level {fc.level} {fc.raceSide} {fc.raceName} {fc.specClass}.\n"; // add the guild info if applicable. if (fc.guild != null) { description += $"\n{he_she} is one of <**{fc.guild.name}**>'s {fc.guild.members} members.\n"; } // some urls to use string armory_url = fc.armoryUrl; string avatar_url = fc.avatarUrl; string inset_url = fc.insetImageUrl; string profile_image_url = fc.profileImageUrl; string wowprogress_title = $"View {fc.name} on WoWProgress"; string wowprogress_url = $"{wowprogress_base}/{fc.realm.ToRealmUri()}/{fc.name}"; // actual fields string ilvl = $"**{fc.items.calculatedItemLevel:0.00}** ({fc.items.averageItemLevel} bags)"; string azerite_level = (fc.items?.neck?.isAzeriteItem ?? false) ? $"**{fc.items.neck.azeriteLevel}** (ilvl {fc.items.neck.itemLevel})" : not_applicable; string artifact_level = (fc.items?.artifactRank ?? 0) > 0 ? $"**{fc.items.artifactRank}**" : not_applicable; string legendary_equipped = (fc.items?.legendaryItemCount ?? 0) > 0 ? $"**{fc.items.legendaryItemCount}**" : "0"; string ach_points = $"**{fc.achievementPoints}**"; List <EmbedFieldBuilder> ach_fields = new List <EmbedFieldBuilder>(); // check achievements foreach (int achi_id in _config.CheckedAchievements) { try { var ach = (await Get.Achievement(achi_id))?.Result; bool character_has_completed = fc.achievements.achievementsCompleted.Contains(achi_id); string completed_str = character_has_completed ? ":white_check_mark:" : ":x:"; ach_fields.Add(new EmbedFieldBuilder() { IsInline = true, Name = ach.title, Value = completed_str }); } catch { ach_fields.Add(new EmbedFieldBuilder() { IsInline = true, Name = $"{achi_id}", Value = ":question:" }); } } // build the 'author' as the player. var eab = new EmbedAuthorBuilder { Name = char_title, IconUrl = avatar_url, Url = armory_url }; // buld the 'footer' as something funny var efb = new EmbedFooterBuilder { //IconUrl = "https://us.battle.net/forums/static/images/avatars/wow/avatar-wow-default.png"; Text = judgementalLines.GetRandom() }; // the last modified is (usually) the last time the character logged out of the game. DateTimeOffset dto = DateTime.SpecifyKind(fc.lastModifiedDateTime, DateTimeKind.Local); // build the Embed var builder = new EmbedBuilder { // title/url for wowprogress Title = wowprogress_title, Url = wowprogress_url, // some general pretty Color = fc.classInfo.color.ToDiscordColor(), ThumbnailUrl = avatar_url, ImageUrl = inset_url, // description for the 'one liner' Description = description, // arthor for the armory link/tiny image Author = eab, // footer to be silly Footer = efb, // and the date/time. Timestamp = dto, }; // add all the fields if (reportItemLevel) { builder.AddField(new EmbedFieldBuilder { IsInline = true, Name = "Item Level", Value = ilvl }); } if (reportAzeriteLevel) { builder.AddField(new EmbedFieldBuilder { IsInline = true, Name = "Azerite Level", Value = azerite_level }); } if (reportArtifactLevel) { builder.AddField(new EmbedFieldBuilder { IsInline = true, Name = "Artifact Level", Value = artifact_level }); } if (reportLegendaries) { builder.AddField(new EmbedFieldBuilder { IsInline = true, Name = "Legendaries", Value = legendary_equipped }); } if (reportAchievementPoints) { builder.AddField(new EmbedFieldBuilder { IsInline = true, Name = "Achievement Points", Value = ach_points }); } // and the acheivement fields foreach (var b in ach_fields) { builder.AddField(b); } return(builder.Build()); }
public virtual IEnumerator <ccr.ITask> GetHandler(Get get) { get.ResponsePort.Post(_state); yield break; }
public static async Task <GetUserInfoResult> GetUserIdAsync(string accessToken, string code, string agentId) { var url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={0}&code={1}&agentid={2}", accessToken.AsUrlData(), code.AsUrlData(), agentId.AsUrlData()); return(await Get.GetJsonAsync <GetUserInfoResult>(url)); }
public void Register (Get g) { }
TransformedProperties getProperties(TransformType transform) { TransformedProperties tp = null; switch (transform) { case TransformType.Toad: tp = new TransformedProperties(); tp.sprite_size = Vector3.one * 0.3432823f; tp.sprite = Get.getSprite("GUI/InGame/toad"); tp.speed = 3.5f; tp.defenses = new List <Defense>(); tp.defenses.Add(new Defense(EffectType.Force, 0f)); tp.defenses.Add(new Defense(EffectType.Magic, 0f)); tp.rotation_interval = 0.2f; tp.rotation_inverse_speed_factor = 4; tp.rotation_interval = 0.05f; tp.physics_material = "toad"; tp.collider_size = Vector2.one * 0.15f; tp.linear_drag = 3f; tp.angular_drag = 1f; break; case TransformType.StickFigure: tp = new TransformedProperties(); tp.sprite_size = Vector3.one * 0.3053726f; tp.sprite = Get.getSprite("GUI/InGame/gingerbread_man"); tp.speed = 3.5f; tp.defenses = new List <Defense>(); tp.defenses.Add(new Defense(EffectType.Force, 0f)); tp.defenses.Add(new Defense(EffectType.Magic, 0f)); tp.rotation_interval = 0.2f; tp.rotation_inverse_speed_factor = 4; tp.rotation_interval = 0.05f; tp.physics_material = "soldier"; tp.collider_size = Vector2.one * 0.15f; tp.linear_drag = 5f; tp.angular_drag = 4f; break; case TransformType.FruitFly: tp = new TransformedProperties(); tp.sprite_size = Vector3.one * 0.08f; tp.sprite = Get.getSprite("GUI/InGame/fruitfly"); tp.speed = 3f; tp.defenses = new List <Defense>(); tp.defenses.Add(new Defense(EffectType.Force, 0f)); tp.defenses.Add(new Defense(EffectType.Magic, 0f)); tp.rotation_interval = 0.2f; tp.rotation_inverse_speed_factor = 4; tp.rotation_interval = 0.05f; tp.physics_material = "fruitfly"; tp.collider_size = Vector2.one * 0.25f; tp.linear_drag = 5f; tp.angular_drag = 8f; break; case TransformType.Whale: tp = new TransformedProperties(); tp.sprite_size = Vector3.one * 0.8f; tp.sprite = Get.getSprite("GUI/InGame/whale"); tp.speed = 0.01f; tp.defenses = new List <Defense>(); tp.defenses.Add(new Defense(EffectType.Force, 0f)); tp.defenses.Add(new Defense(EffectType.Magic, 0f)); tp.rotation_interval = 0.2f; tp.rotation_inverse_speed_factor = 4; tp.rotation_interval = 0.05f; tp.physics_material = "whale"; tp.collider_size = Vector2.one * 0.35f; tp.linear_drag = 10f; tp.angular_drag = 0f; break; default: Debug.Log("Coverter does not know properties for " + name + "\n"); break; } if (tp != null) { tp.defenses.Add(new Defense(EffectType.Transform, 1f)); } return(tp); }
public virtual IEnumerator<ITask> GetHandler(Get get) { get.ResponsePort.Post(_state); yield break; }
/// <summary> /// 删除成员 /// </summary> /// <param name="accessToken">调用接口凭证</param> /// <param name="userId">员工UserID</param> /// <returns></returns> public static QyJsonResult DeleteMember(string accessToken, string userId) { var url = string.Format("https://qyapi.weixin.qq.com/cgi-bin/user/delete?access_token={0}&userid={1}", accessToken.AsUrlData(), userId.AsUrlData()); return(Get.GetJson <QyJsonResult>(url)); }
void GetHandler(Get get) { Tracer.Trace("SickLRF::GetHandler()"); get.ResponsePort.Post(_state); }
public void GetHandler(Get get) { this.state.TiltDegrees = this.kinectSensor.ElevationAngle; get.ResponsePort.Post(this.state); }