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);
     }
 }
예제 #6
0
        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);
        }
예제 #7
0
        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);
        }
예제 #8
0
        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"));
 }
예제 #10
0
        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;
         }
     }
 }
예제 #15
0
        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);
        }
예제 #18
0
        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);
        }
예제 #19
0
        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);
        }
예제 #20
0
        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);
                }
            }
        }
예제 #27
0
        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!");
        }
예제 #28
0
        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;
            }
        }
예제 #29
0
 private static Get FetchUserById(int id)
 {
     return(Get.ResourceAt($"api/Users/{id}"));
 }
예제 #30
0
        /// <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));
        }
예제 #31
0
    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;
        }
    }
예제 #32
0
        /// <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));
        }
예제 #33
0
 public async Task <TblUser> FindByPhoneNumberAsync(string phoneNumber)
 {
     return(await Get.Where(a => a.PhoneNumber == phoneNumber).SingleOrDefaultAsync());
 }
예제 #34
0
        /// <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));
        }
예제 #35
0
        /// <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));
        }
예제 #36
0
        public IActionResult ManageTeachers()
        {
            ManageTeachersViewModel manageTeachersViewModel = new Get().ManageTeachers();

            return(View(manageTeachersViewModel));
        }
예제 #37
0
        /// <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));
        }
예제 #38
0
 public AlarmPanel() : base(Resources.Uri(AssemblyData.ShortName(), "/Images/Music.png"))
 {
     Get.Current <Options>().Alarm.Initialize();
 }
예제 #39
0
 public int GetRowsCount() => Get.CountOfElements(RowScss, FrameBy);
예제 #40
0
 private void OnGetPredictors(Get <IHas <IPredictionLogic> > request)
 {
     request.Elements = predictors.ToList();
 }
예제 #41
0
        /// <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));
        }
예제 #42
0
 public static IObservable <T> DecorateWithTime <T>(this IObservable <T> source)
 {
     return(source.Do(i => { Get.Now(); }));
 }
예제 #43
0
        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);
            }
        }
예제 #44
0
 public virtual void GetHandler(Get get)
 {
     get.ResponsePort.Post(_state);
 }
 public virtual IEnumerator <ITask> GetAccelerometerHandler(Get get)
 {
     get.ResponsePort.Post(_state);
     yield break;
 }
예제 #46
0
    // "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;
        }
    }
예제 #47
0
 public GetTests()
 {
     MOutput = new Mock <IOutput>();
     Ctrl    = new Get(MOutput.Object);
 }
예제 #48
0
        /// <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());
 }
예제 #50
0
        /// <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);
            }
        }
예제 #52
0
파일: ItemLevel.cs 프로젝트: nitz/ilvlbot
        /// <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());
        }
예제 #53
0
 public virtual IEnumerator <ccr.ITask> GetHandler(Get get)
 {
     get.ResponsePort.Post(_state);
     yield break;
 }
예제 #54
0
        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));
        }
예제 #55
0
파일: test-549.cs 프로젝트: nobled/mono
 public void Register (Get g)
 {
 }
예제 #56
0
    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);
    }
예제 #57
0
 public virtual IEnumerator<ITask> GetHandler(Get get)
 {
     get.ResponsePort.Post(_state);
     yield break;
 }
예제 #58
0
        /// <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));
        }
예제 #59
0
        void GetHandler(Get get)
        {
            Tracer.Trace("SickLRF::GetHandler()");

            get.ResponsePort.Post(_state);
        }
예제 #60
0
        public void GetHandler(Get get)
        {
            this.state.TiltDegrees = this.kinectSensor.ElevationAngle;

            get.ResponsePort.Post(this.state);
        }