public void Call_NotMoreThen3CallsPerSecond()
        {
            int invocationCount = 0;
            var browser = new Mock<IBrowser>();
            browser.Setup(m => m.GetJson(It.IsAny<string>()))
                   .Returns(@"{ ""response"": 2 }")
                   .Callback(() => invocationCount++);

            var api = new VkApi {Browser = browser.Object};

            var start = DateTimeOffset.Now;
            while (true)
            {
                api.Call("someMethod", VkParameters.Empty, true);

                int total = (int)(DateTimeOffset.Now - start).TotalMilliseconds;
                if (total > 999)
                    break;

            }

            // Не больше 4 раз, т.к. 4-ый раз вызывается через 1002 мс после первого вызова, а total выходит через 1040 мс
            // переписать тест, когда придумаю более подходящий метод проверки
            browser.Verify(m => m.GetJson(It.IsAny<string>()), Times.AtMost(4));
        }
Example #2
0
        /// <summary>
        /// Получение json по url-адресу
        /// </summary>
        /// <param name="url">Адрес получения json</param>
        /// <returns>Строка в формате json</returns>
        public string GetJson(string url, VkApi vkApi)
        {
            var separatorPosition = url.IndexOf('?');
            string methodUrl = separatorPosition < 0 ? url : url.Substring(0, separatorPosition);
            string parameters = separatorPosition < 0 ? string.Empty : url.Substring(separatorPosition + 1);

            return WebCall.PostCall(methodUrl, parameters, vkApi).Response;
        }
Example #3
0
 private WebCall(string url, Cookies cookies, VkApi vk)
 {
     Request = (HttpWebRequest)WebRequest.Create(url);
     Request.Accept = "text/html";
     Request.UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)";
     Request.CookieContainer = cookies.Container;
     if (!vk.isDefaultVkApi)
     {
         createProxy(ProxyManager.getInstance().reserveOrGet(vk.email), Request);
     }
     Result = new WebCallResult(url, cookies);
 }
Example #4
0
        public static WebCallResult PostCall(string url, string parameters,VkApi vk)
        {
            var call = new WebCall(url, new Cookies(), vk);
            call.Request.Method = "POST";
            call.Request.ContentType = "application/x-www-form-urlencoded";
            
            var data = Encoding.UTF8.GetBytes(parameters);
            call.Request.ContentLength = data.Length;

            using (var requestStream = call.Request.GetRequestStream())
                requestStream.Write(data, 0, data.Length);                

            return call.MakeRequest(vk);
        }
Example #5
0
        public static WebCallResult Post(WebForm form, VkApi vk)
        {
            var call = new WebCall(form.ActionUrl, form.Cookies, vk);

            var request = call.Request;
            
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            var formRequest = form.GetRequest();
            request.ContentLength = formRequest.Length;
            request.Referer = form.OriginalUrl;
            request.GetRequestStream().Write(formRequest, 0, formRequest.Length);
            request.AllowAutoRedirect = false;

            return call.MakeRequest(vk);
        }
Example #6
0
        public void Init()
        {
            var browser = new Mock<IBrowser>();
            browser.Setup(m => m.GetJson(It.Is<string>(s => s == Url)))
                .Callback(Callback)
                .Returns(() =>
                {
                    if (string.IsNullOrWhiteSpace(Json))
                    {
                        throw new ArgumentNullException(nameof(Json), @"Json не может быть равен null. Обновите значение поля Json");
                    }
                    return Json;
                });

            browser.Setup(o => o.Authorize(
                It.IsAny<ulong>(),
                It.IsAny<string>(),
                It.IsAny<string>(),
                It.IsAny<Settings>(),
                It.IsAny<Func<string>>(),
                It.IsAny<long?>(),
                It.IsAny<string>(),
                It.IsAny<string>(),
                It.IsAny<int?>(),
                It.IsAny<string>(),
                It.IsAny<string>()
                )
			)
			.Returns(VkAuthorization.From(new Uri("https://vk.com/auth?__q_hash=qwerty&access_token=token&expires_in=1000&user_id=1")));
            Api = new VkApi
            {
                Browser = browser.Object
            };
            Api.Authorize(new ApiAuthParams
            {
	            ApplicationId = 1,
				Login = "******",
				Password = "******",
				Settings = Settings.All
            });
	        Api.RequestsPerSecond = 10000; // Чтобы тесты быстрее выполнялись
        }
Example #7
0
 internal MessagesCategory(VkApi vk)
 {
     _vk = vk;
 }
 public VKMessageSender(VkApi api)
 {
     this.api = api;
 }
Example #9
0
 internal FriendsCategory(VkApi vk)
 {
     _vk = vk;
 }
Example #10
0
		/// <summary>
		/// Методы для работы с подарками.
		/// </summary>
		/// <param name="vk">API.</param>
		internal GiftsCategory(VkApi vk)
		{
			_vk = vk;
		}
Example #11
0
 public static List <Video> GetVideos(VkApi vkApi, long?userId) =>
 vkApi.Video.Get(new VideoGetParams {
     OwnerId = userId
 })
 .ToList();
Example #12
0
 public void AuthorizeByTokenNegative()
 {
     Api = new VkApi(); // В базовом классе предопределено свойство AccessToken
     Api.Authorize("", 1);
     Assert.That(Api.UserId, Is.Null);
 }
Example #13
0
		/// <summary>
		/// Методы для работы с приложениями.
		/// </summary>
		/// <param name="vk">API.</param>
		internal AppsCategory(VkApi vk)
		{
			_vk = vk;
		}
Example #14
0
 /// <summary>
 /// Методы для работы с сообщениями.
 /// </summary>
 /// <param name="vk">API</param>
 internal MessagesCategory(VkApi vk)
 {
     _vk = vk;
 }
Example #15
0
 public VkMethods()
 {
     this.api = new VkApi();
     this.db  = new DbMethods();
 }
Example #16
0
 private SingleAPI()
 {
     this.API = new VkApi();
 }
Example #17
0
        /// <summary>
        /// Действия в 00 Минут каждого часа
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public Task Execute(IJobExecutionContext context)
        {
            Database database = new Database();

            if (DateTime.Now.Hour == 00)
            {
                database.CleanTable("Votes");
                database.SetWorkingVariable("VoteAcces", "open");
                Dictionary <string, string> warnings = database.GetDictionaryString("WarningList");
                foreach (var warning in warnings)
                {
                    if (warning.Value != "опер")
                    {
                        string tempString = database.RandomResponse("RandomNewInfo");
                        tempString = tempString.Replace("{warning}", warning.Value);
                        database.InfoUpdate(warning.Value, tempString);
                    }
                }
            }
            else if ((DateTime.Now.Day == 31 && DateTime.Now.Month == 12) || (DateTime.Now.Day == 01 && DateTime.Now.Month == 01))
            {
                VkApi    client = new VkApi();
                Database db     = new Database();
                client.Authorize(new ApiAuthParams()
                {
                    AccessToken = db.GetWorkingVariable("BigBroKey")
                });
                MessagesSendParams @params = new MessagesSendParams();
                Audio Track = new Audio();
                Track.OwnerId = -187905748;
                if (DateTime.Now.Day == 31 && DateTime.Now.Hour == 14)
                {
                    @params.Message = "Так)) ещё немного и у кого-то начнётся веселье))\nНастоятельно рекомендую слушать песни которые я буду отправлять))" +
                                      "99% что поднимут настроение, если не поднимут, то вы ещё недостаточно выпили!!";
                }
                else if (DateTime.Now.Day == 31 && DateTime.Now.Hour == 15)
                {
                    @params.Message = "С Новым годом! Пусть к чёрту катятся все проблемы! Пусть трезвый Дед Мороз подарит опьяняющее счастье трезвой реальности!" +
                                      " Желаю крутых подъёмов в новом году, максимальных доходов, желаемых результатов в делах и невероятно страстных чувств в отношениях!";
                    Track.Id = 456239033;
                }
                else if (DateTime.Now.Day == 31 && DateTime.Now.Hour == 16)
                {
                    @params.Message = "Новый год стучится в двери, а это значит, что пора пинком под зад отправить все проблемы, запастись охапками продуктов и" +
                                      " с широкою, довольною улыбкой набираться позитива. Улыбайтесь же и веселитесь, гоните в шею все дурные мысли! Как шампанское, бурлите " +
                                      "от радости и мечтайте о великих перспективах!";
                    Track.Id = 456239018;
                }
                else if (DateTime.Now.Day == 31 && DateTime.Now.Hour == 17)
                {
                    @params.Message = "С Новым годом! Желаю быть чудом весь чудесный год, желаю снегопада денег и вьюги удачи, вихря счастья и бурана любви. " +
                                      "Пусть этот год будет суперским и мега-крутым, а в нём пусть будет и драйв, и кайф, и роскошь!";
                    Track.Id = 456239020;
                }
                else if (DateTime.Now.Day == 31 && DateTime.Now.Hour == 18)
                {
                    @params.Message = "С Новым годом! Желаю выбросить и носки с дырками, и мысли с глупостями, и сомнения по любому поводу. Надеюсь, твоё " +
                                      "поведение было прилежным, и Дед Мороз подарит тебе что-то хорошее. Желаю круто встретить новый год и провести его под громким девизом " +
                                      "постоянного счастья!";
                    Track.Id = 456239022;
                }
                else if (DateTime.Now.Day == 31 && DateTime.Now.Hour == 19)
                {
                    @params.Message = "Пусть Дед Мороз не забудет исполнить все пожелания, президент в полночь пообещает что-то оригинальное, а соседи наберут " +
                                      "самых красочных петард для праздничного салюта. Отдайте уходящему году мешок со всеми долгами, неприятностями и невзгодами, обратный " +
                                      "адрес не указывайте. С Новым годом!";
                    Track.Id = 456239037;
                }
                else if (DateTime.Now.Day == 31 && DateTime.Now.Hour == 20)
                {
                    @params.Message = "Поздравляю с Новым годом! Пусть всегда удаётся смотреть трезво на жизнь, но в то же время быть в опьянении от счастья. " +
                                      "Желаю, чтобы шампусик смыл прошлые обиды и печали, чтобы в новом году было столько удачи и веселья, сколько горошинок в самом большом " +
                                      "тазу оливье!";
                    Track.Id = 456239034;
                }
                else if (DateTime.Now.Day == 31 && DateTime.Now.Hour == 21)
                {
                    @params.Message = "С Новым годом! Желаю встретить его без похмелья, но с весёлыми приключениями на пятую точку! Пусть всё будет, как в доброй" +
                                      " сказке, как в старом хорошем фильме. Желаю, чтобы заливная рыба была совсем не гадостью, чтобы тебя никто не поливал из чайника, чтобы " +
                                      "не потянуло ни в баню, ни в Ленинград. Пусть новый год сорит деньгами и бьёт битой всех обидчиков!";
                    Track.Id = 456239035;
                }
                else if (DateTime.Now.Day == 31 && DateTime.Now.Hour == 22)
                {
                    @params.Message = "Поздравляю с Новым годом и от души желаю если хреновины, то только к холодцу, если падения, то только в объятия любимого " +
                                      "человека, если страха, то только у врагов, если мусора, то только в виде бутылок от дорогого алкоголя и контейнеров от обалденной икры.";
                    Track.Id = 456239036;
                }
                else if (DateTime.Now.Day == 31 && DateTime.Now.Hour == 23)
                {
                    @params.Message = "Пусть на утро января не болит голова от выпитого, чтобы желания сбываться начали уже с этого дня. Желаю под елкой найти мешок" +
                                      " с деньгами, чтобы хватало на многие года вперед. С Новым годом!";
                    Track.Id = 456239032;
                }
                else if (DateTime.Now.Day == 01 && DateTime.Now.Hour == 00)
                {
                    @params.Message = "Желаю в Новом году всем крепкой печени и внутреннего навигатора, чтобы точно знать как вы пришли туда, где проснулись.";
                    Track.Id        = 456239028;
                }
                else if (DateTime.Now.Day == 01 && DateTime.Now.Hour == 01)
                {
                    @params.Message = "С Новым годом. Желаю «не ударить» в Оливье лицом, желаю шампанское и прочие горючие хорошенько закусывать холодцом, желаю" +
                                      " в Новом году быть огурцом, желаю утро нового календаря встретить радостно и без похмелья. А ещё желаю здоровья, ума и денег!";
                    Track.Id = 456239023;
                }

                List <long> Chats = db.GetListLong("MainMakara");
                foreach (var chat in Chats)
                {
                    if (Track.Id != null)
                    {
                        @params.Attachments = new[] { Track }
                    }
                    ;
                    @params.RandomId = new Random().Next();
                    @params.PeerId   = chat;
                    client.Messages.Send(@params);
                }
            }
            database.CleanTable("ComandsFromUser");

            return(null);
        }
    }
Example #18
0
		/// <summary>
		/// 
		/// </summary>
		/// <param name="vk"></param>
		public WallCategory(VkApi vk)
		{
			_vk = vk;
		}
Example #19
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="vk"></param>
 public UsersCategory(VkApi vk)
 {
     _vk = vk;
 }
Example #20
0
 public VkccService(VkApi api)
 {
     _api = api;
 }
Example #21
0
 internal UtilsCategory(VkApi vk)
 {
     _vk = vk;
 }
Example #22
0
 private void InitializeVKAPI()
 {
     VKAPIApplicationID = ulong.Parse(Resources[VK_API_APP_ID_KEY] as String);
     VKAPI = new VkApi();
     VKAPI.OnTokenExpires += VKAPI_OnTokenExpires;
 }
Example #23
0
 internal FaveCategory(VkApi vk)
 {
     _vk = vk;
     Ex = new FaveCategoryExtended(this, _vk);
 }
Example #24
0
 private void VKAPI_OnTokenExpires(VkApi api)
 {
     this.SignOut();
 }
Example #25
0
 internal UsersCategory(VkApi vk)
 {
     _vk = vk;
 }
Example #26
0
 /// <summary>
 /// Методы для работы с документами (получение списка, загрузка, удаление и т.д.).
 /// </summary>
 /// <param name="vk">API.</param>
 public DocsCategory(VkApi vk)
 {
     _vk = vk;
 }
Example #27
0
 internal DocsCategory(VkApi vk)
 {
     _vk = vk;
     Ex = new DocsCategoryExtended(this, _vk);
 }
Example #28
0
 internal UsersCategory(VkApi vk)
 {
     _vk = vk;
 }
Example #29
0
 public void Search_EmptyAccessToken_ThrowAccessTokenInvalidException()
 {
     var vk = new VkApi();
     int count;
     This.Action(() => vk.Users.Search(Query, out count)).Throws<AccessTokenInvalidException>();
 }
        private RenderPass CreateRenderpass()
        {
            AttachmentDescription *pAttachments = stackalloc AttachmentDescription[2]
            {
                //Color Attachment
                new AttachmentDescription
                {
                    Format         = SwapchainImageFormat,
                    Samples        = SampleCountFlags.SampleCount1Bit,
                    LoadOp         = AttachmentLoadOp.Clear,
                    StoreOp        = AttachmentStoreOp.Store,
                    StencilLoadOp  = AttachmentLoadOp.DontCare,
                    StencilStoreOp = AttachmentStoreOp.DontCare,
                    InitialLayout  = ImageLayout.Undefined,
                    FinalLayout    = ImageLayout.PresentSrcKhr
                },

                //Depth Attachment
                new AttachmentDescription
                {
                    Format         = DepthFormat,
                    Samples        = SampleCountFlags.SampleCount1Bit,
                    LoadOp         = AttachmentLoadOp.Clear,
                    StoreOp        = AttachmentStoreOp.DontCare,
                    StencilLoadOp  = AttachmentLoadOp.DontCare,
                    StencilStoreOp = AttachmentStoreOp.DontCare,
                    InitialLayout  = ImageLayout.Undefined,
                    FinalLayout    = ImageLayout.DepthStencilAttachmentOptimal
                }
            };

            var colorAttachmentRef = new AttachmentReference(0, ImageLayout.ColorAttachmentOptimal);

            var depthAttachmentRef = new AttachmentReference(1, ImageLayout.DepthStencilAttachmentOptimal);

            var subpass = new SubpassDescription
            {
                PipelineBindPoint       = PipelineBindPoint.Graphics,
                ColorAttachmentCount    = 1,
                PColorAttachments       = &colorAttachmentRef,
                PDepthStencilAttachment = &depthAttachmentRef
            };

            var dependency = new SubpassDependency
            {
                SrcSubpass    = Vk.SubpassExternal,
                DstSubpass    = 0,
                SrcStageMask  = PipelineStageFlags.PipelineStageColorAttachmentOutputBit,
                SrcAccessMask = 0,
                DstStageMask  = PipelineStageFlags.PipelineStageColorAttachmentOutputBit,
                DstAccessMask = AccessFlags.AccessColorAttachmentReadBit | AccessFlags.AccessColorAttachmentWriteBit
            };

            var renderPassInfo = new RenderPassCreateInfo
            {
                SType           = StructureType.RenderPassCreateInfo,
                AttachmentCount = 2,
                PAttachments    = pAttachments,
                SubpassCount    = 1,
                PSubpasses      = &subpass,
                DependencyCount = 1,
                PDependencies   = &dependency
            };

            RenderPass rPass;
            var        res = VkApi.CreateRenderPass(Device, &renderPassInfo, null, &rPass);

            if (res != Result.Success)
            {
                throw new VMASharp.VulkanResultException("Failed to create RenderPass!", res);
            }

            return(rPass);
        }
    }
Example #31
0
 /// <summary>
 /// Методы для работы с аудиозаписями.
 /// </summary>
 /// <param name="vk"> Api vk.com </param>
 public AudioCategory(VkApi vk)
 {
     _vk = vk;
 }
Example #32
0
        public OnlineAlways(VkApi api, MainView mainView)
        {
            Api = api;

            MainView = mainView;
        }
        public void Call_ThrowsCaptchaNeededException()
        {
            const string json =
                @"{
                    'error': {
                      'error_code': 14,
                      'error_msg': 'Captcha needed',
                      'request_params': [
                        {
                          'key': 'oauth',
                          'value': '1'
                        },
                        {
                          'key': 'method',
                          'value': 'messages.send'
                        },
                        {
                          'key': 'uid',
                          'value': '242508553'
                        },
                        {
                          'key': 'message',
                          'value': 'hello10'
                        },
                        {
                          'key': 'type',
                          'value': '0'
                        },
                        {
                          'key': 'access_token',
                          'value': '1fe7889c3395722934b1'
                        }
                      ],
                      'captcha_sid': '548747100691',
                      'captcha_img': 'http://api.vk.com/captcha.php?sid=548747100284&s=1'
                    }
                  }";

            var browser = Mock.Of<IBrowser>(m => m.GetJson(It.IsAny<string>()) == json);
            var api = new VkApi {Browser = browser};

            var ex = This.Action(() => api.Call("messages.send", VkParameters.Empty, true)).Throws<CaptchaNeededException>();

            ex.Sid.ShouldEqual(548747100691);
            ex.Img.ShouldEqual(new Uri("http://api.vk.com/captcha.php?sid=548747100284&s=1"));
        }
Example #34
0
 /// <summary>
 /// Методы для работы с подарками.
 /// </summary>
 /// <param name="vk">API.</param>
 public AuthCategory(VkApi vk)
 {
     _vk = vk;
 }
        public override void ExecutePL(RootObject update, VkApi client, SqlConnection Con)
        {
            MessagesSendParams @params = new MessagesSendParams();
            var        chatId          = [email protected]_id;
            var        keyboardBuilder = new KeyboardBuilder().Clear();
            UserObject user            = new UserObject();
            UInt64     lvlExp          = 100;
            int        i = 0;

            try
            {
                SqlCommand getUser = new SqlCommand("SELECT * FROM Users WHERE chatId = @chatId;", Con);
                getUser.Parameters.AddWithValue("@chatId", chatId);
                SqlDataReader rgetUser = getUser.ExecuteReader();
                rgetUser.Read();
                user.state = Convert.ToInt32(rgetUser["state"]);
                user.study = Convert.ToInt32(rgetUser["study"]);
                rgetUser.Close();

                if (user.study == 1)
                {
                    SqlCommand updTag = new SqlCommand("UPDATE Users SET tag = @tag WHERE chatId = @chatId;", Con);
                    updTag.Parameters.AddWithValue("@chatId", chatId);
                    updTag.Parameters.AddWithValue("@tag", "Новичок - Обучение - ЦифраБанк");
                    //updTag.Parameters.AddWithValue("@state", 2);
                    updTag.ExecuteNonQuery();

                    @params.Keyboard = keyboardBuilder.Build();
                    @params.UserId   = chatId;
                    @params.Message  =
                        "В ЦифраБанке можно открыть счёт, а также взять кредит на свои цели.";
                    @params.RandomId = GetRandomId();
                    client.Messages.SendAsync(@params);

                    Thread.Sleep(1000);
                    keyboardBuilder
                    .AddButton("Открыть счет", "selectGetBankCard", KeyboardButtonColor.Positive);

                    @params.Message  = "🎓 Открой счёт в банке, будешь хранить своё золото на данном счету";
                    @params.Keyboard = keyboardBuilder.Build();
                    @params.UserId   = chatId;
                    @params.RandomId = GetRandomId();
                    client.Messages.SendAsync(@params);
                }
                else
                {
                    SqlCommand updTag = new SqlCommand("UPDATE Users SET tag = @tag WHERE chatId = @chatId;", Con);
                    updTag.Parameters.AddWithValue("@chatId", chatId);
                    updTag.Parameters.AddWithValue("@tag", "Новичок - Обучение - ЦифраБанк");
                    //updTag.Parameters.AddWithValue("@state", 2);
                    updTag.ExecuteNonQuery();

                    @params.Keyboard = keyboardBuilder.Build();
                    @params.UserId   = chatId;
                    @params.Message  =
                        "В ЦифраБанке можно открыть счёт, а также взять кредит на свои цели.";
                    @params.RandomId = GetRandomId();
                    client.Messages.SendAsync(@params);
                }
            }
            catch (Exception ee)
            {
                @params.Message     = "Ошибка в SelectBankCommand: " + ee.Message;
                @params.Attachments = null;
                @params.Keyboard    = null;
                @params.UserId      = 59111081;
                @params.RandomId    = GetRandomId();
                client.Messages.SendAsync(@params);
            }
        }
        public override void Dispose()
        {
            VkApi.DestroyRenderPass(this.Device, this.RenderPass, null);

            base.Dispose();
        }
Example #37
0
 /// <summary>
 /// Методы для работы с закладками.
 /// </summary>
 /// <param name="vk">API.</param>
 internal FaveCategory(VkApi vk)
 {
     _vk = vk;
 }
        private unsafe void CreateBuffers()
        {
            PositionColorVertex[] positionData = VertexData.IndexedCubeData;

            ushort[] indexData = VertexData.CubeIndexData;

            InstanceData[] instanceData = new InstanceData[]
            {
                new InstanceData(new Vector3(0, 0, 0)),
                new InstanceData(new Vector3(2, 0, 0)),
                new InstanceData(new Vector3(-2, 0, 0))
            };

            CreateHostBufferWithContent <PositionColorVertex>(positionData, out var hostBuffer1, out var hostAlloc1);
            CreateHostBufferWithContent <ushort>(indexData, out var hostBuffer2, out var hostAlloc2);
            CreateHostBufferWithContent <InstanceData>(instanceData, out var hostBuffer3, out var hostAlloc3);

            CreateDeviceLocalBuffer(BufferUsageFlags.BufferUsageVertexBufferBit, GetByteLength(positionData), out this.VertexBuffer, out this.VertexAllocation);
            CreateDeviceLocalBuffer(BufferUsageFlags.BufferUsageIndexBufferBit, GetByteLength(indexData), out this.IndexBuffer, out this.IndexAllocation);
            CreateDeviceLocalBuffer(BufferUsageFlags.BufferUsageVertexBufferBit, GetByteLength(instanceData), out this.InstanceBuffer, out this.InstanceAllocation);

            var cbuffer = AllocateCommandBuffer(CommandBufferLevel.Primary);

            BufferCopy *copies = stackalloc BufferCopy[1];

            BeginCommandBuffer(cbuffer, CommandBufferUsageFlags.CommandBufferUsageOneTimeSubmitBit);

            copies[0] = new BufferCopy(0, 0, (ulong)GetByteLength(positionData));
            VkApi.CmdCopyBuffer(cbuffer, hostBuffer1, this.VertexBuffer, 1, copies);

            copies[0] = new BufferCopy(0, 0, (ulong)GetByteLength(indexData));
            VkApi.CmdCopyBuffer(cbuffer, hostBuffer2, this.IndexBuffer, 1, copies);

            copies[0] = new BufferCopy(0, 0, (ulong)GetByteLength(instanceData));
            VkApi.CmdCopyBuffer(cbuffer, hostBuffer3, this.InstanceBuffer, 1, copies);

            EndCommandBuffer(cbuffer);

            var subInfo = new SubmitInfo(commandBufferCount: 1, pCommandBuffers: &cbuffer);

            var fence = CreateFence();

            var res = VkApi.QueueSubmit(GraphicsQueue, 1, &subInfo, fence);

            if (res != Result.Success)
            {
                throw new Exception("Unable to submit to queue. " + res);
            }

            var bufferTmp = cbuffer; //Allows the capture of this command buffer in a lambda

            BufferCopyPromise = this.scheduler.WaitForFenceAsync(fence);

            BufferCopyPromise.GetAwaiter().OnCompleted(() =>
            {
                VkApi.DestroyFence(Device, fence, null);

                FreeCommandBuffer(bufferTmp);

                VkApi.DestroyBuffer(Device, hostBuffer1, null);
                VkApi.DestroyBuffer(Device, hostBuffer2, null);
                VkApi.DestroyBuffer(Device, hostBuffer3, null);

                hostAlloc1.Dispose();
                hostAlloc2.Dispose();
                hostAlloc3.Dispose();
            });

            this.VertexCount   = (uint)positionData.Length;
            this.IndexCount    = (uint)indexData.Length;
            this.InstanceCount = (uint)instanceData.Length;
        }
Example #39
0
 internal DatabaseCategory(VkApi vk)
 {
     _vk = vk;
 }
 internal GroupsCategory(VkApi vk)
 {
     _vk = vk;
 }
Example #41
0
 /// <summary>
 /// Методы для работы с wiki.
 /// </summary>
 /// <param name="vk">API.</param>
 internal PagesCategory(VkApi vk)
 {
     _vk = vk;
 }
Example #42
0
        /// <summary>
        /// Метод работающий с API VK
        /// </summary>
        static void SolverApi()
        {
            string logFileBot   = $@"logs\{DateTime.Now.ToString("yyyyMMdd")}_vkbot.log ";
            string logStringBot = $"\n[{DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")}]";

            Console.WriteLine($"{DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")} initialization ");
            logStringBot += "[initialization]";
            File.AppendAllText(logFileBot, logStringBot);

            //параметры подключения
            //для безопасности и универсальности вынесены за пределы компилируемого кода в отдельные файлы
            //процесс настройки и получения значений описан в документации "VK-RMEbot server settings.ppt"
            string apikey   = File.ReadAllText("_apikey");
            ulong  appid    = Convert.ToUInt64(File.ReadAllText("_appid"));
            string login    = File.ReadAllText("_login");
            string password = File.ReadAllText("_password");
            string groupid  = File.ReadAllText("_groupid");

            // цикл создания сеансов обращений к серверу VK
            // первый запуск, перезапуск после обработанной ошибки, перезапуск по таймеру
            while (true)
            {
                //используем функционал VkNet
                VkApi     vkClient  = new VkApi();
                WebClient webClient = new WebClient();

                vkClient.Authorize(new ApiAuthParams
                {
                    ApplicationId = appid,
                    Login         = login,
                    Password      = password,
                    Settings      = Settings.All
                });

                var param = new VkParameters(new Dictionary <string, string>()
                {
                    { "group_id", groupid }
                });
                //получить id группы https://vk.com/dev/utils.resolveScreenName

                dynamic longPoll = JObject.Parse(vkClient.Call("groups.getLongPollServer", param).RawJson);
                // https://vk.com/dev/groups.getLongPollServer
                // https://vk.com/dev/using_longpoll


                // key - секретный ключ сессии
                // server - адрес сервера
                // ts - номер последнего события, начиная с которого надо получать данные
                // https://{$server}?act=a_check&key={$key}&ts={$ts}&wait=25&mode=2&version=1
                string json = String.Empty;

                string url = String.Empty;

                // специальная метка времени для принудительного перезапуска сеанса работы с VK
                // иначе сеанс зависает и перестаёт принимать и отправлять сообщения
                // по умолчанию перезапуск сеанса идёт каждые 30 минут
                DateTime watchDog = DateTime.Now;
                Console.WriteLine($"WatchDog set to {watchDog.ToString("dd.MM.yyyy HH:mm:ss")}");
                logStringBot = @$ "[WatchDog set to {watchDog.ToString(" dd.MM.yyyy HH : mm : ss ")}]";
                File.AppendAllText(logFileBot, logStringBot);

                //обращение к longPoll сервису VK
                while (true)
                {
                    //строка запроса
                    url = string.Format("{0}?act=a_check&key={1}&ts={2}&wait=10",
                                        longPoll.response.server.ToString(),
                                        longPoll.response.key.ToString(),
                                        json != String.Empty ? JObject.Parse(json)["ts"].ToString() : longPoll.response.ts.ToString()
                                        );
                    // https://lp.vk.com/wh193815240?act=a_check&key=9.......2&wait=25&mode=2&ts=1



                    //ответ сервера
                    json = webClient.DownloadString(url);

                    //Console.WriteLine(url);
                    //Console.WriteLine(json);


                    //пустой ответ
                    #region Empty Json
                    //{
                    //    ts: "500",
                    //    updates: [ ]
                    //}
                    #endregion

                    // проверяем ответ на пустоту, а так же некоторые сообщения об ошибках
                    var jsonMsg = json.IndexOf(":[]}") > -1 ? "" : $"{json} \n";

                    // обрабатываем ошибки и перезапускаем сеанс работы с VK
                    if (json.IndexOf("failed\":2}") > -1)
                    {
                        Console.WriteLine($"{DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")} json failed 2 ");
                        logStringBot  = $"\n[{DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")}]";
                        logStringBot += $"[Error: json failed 2]";
                        File.AppendAllText(logFileBot, logStringBot);

                        break;
                    }

                    if (json.IndexOf("failed\":3}") > -1)
                    {
                        Console.WriteLine($"{DateTime.Now.ToString()} json failed 3 ");
                        logStringBot  = $"\n[{DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")}]";
                        logStringBot += $"[Error: json failed 3]";
                        File.AppendAllText(logFileBot, logStringBot);

                        break;
                    }

                    // Парсим ответ сервера в список-коллекцию (List)
                    var col = JObject.Parse(json)["updates"].ToList();

                    // Проходим по списку
                    foreach (var item in col)
                    {
                        if (item["type"].ToString() == "message_new")
                        {
                            string key = apikey;
                            // ВАЖНО - функциональность API VK зависит от запрошенной версии
                            // например "v=5.69" даёт кнопки и возвращает их payload
                            // а "v=5.41" - нет
                            string urlBotMsg = $"https://api.vk.com/method/messages.send?v=5.69&access_token={key}&user_id=";
                            //string urlBotMsg = $"https://api.vk.com/method/messages.send?v=5.41&access_token={key}&user_id=";

                            // парсим ответ сервера в переменные, часть сохраняем в файл для отладки
                            string usr = item["object"]["message"]["from_id"].ToString();


                            string logFile   = $@"logs\{DateTime.Now.ToString("yyyyMMdd")}_vkbot_msg.log ";
                            string logString = $@"[{DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")}]";

                            logString += $"[From ID: {usr}]";
                            Console.WriteLine($"From ID: {usr}");

                            string msg = item["object"]["message"]["text"].ToString();

                            logString += $"[Inbound msg: { msg}]";
                            Console.WriteLine($"Inbound msg: {msg}");

                            //парсим payload нажатой пользователем кнопки (если есть)
                            string payload = String.Empty;

                            if (!String.IsNullOrEmpty(item["object"]["message"]["payload"]?.ToString()))
                            {
                                payload    = item["object"]["message"]["payload"].ToString();
                                logString += $"[Payload: {payload}]";
                                Console.WriteLine($"Payload: {payload}");
                            }
                            //если нет - пльзователь не нажал кнопку, а написал боту текст вручную
                            else
                            {
                                logString += $"[Payload: ]";
                                Console.WriteLine("No payload");
                            }

                            File.AppendAllText(logFile, logString);

                            //Console.WriteLine(GetMessage(msg, payload));

                            // формируем строку запроса к longPoll API VK
                            // в том числе добавляем кнопки вариантов
                            // из сценария, вызывая метод GetMessage(msg, payload)
                            string post = string.Format(urlBotMsg + "{0}{1}",
                                                        item["object"]["message"]["from_id"].ToString(),
                                                        $"{GetMessage(msg, payload)}"
                                                        );

                            //Console.WriteLine(post);

                            //отправляем наш ответ пользователю
                            webClient.DownloadString(post);

                            logString = $"\n+\n";
                            File.AppendAllText(logFile, logString);

                            logStringBot  = $"\n[{DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")}]";
                            logStringBot += $"[+]";
                            File.AppendAllText(logFileBot, logStringBot);


                            Console.WriteLine("+");

                            // ждём одну секунду, чтобы не спамить VK частыми запросами (могут забанить за DDOS)
                            Thread.Sleep(1000);
                        }
                    }


                    // проверяем метку времени принудительного перезапуска
                    // каждые полчаса выходим из цикла работы с longPoll API
                    // для перезапуска сеанса работы с VK
                    if (DateTime.Now > watchDog.AddMinutes(30))
                    {
                        Console.WriteLine($"{DateTime.Now.ToString()} WatchDog timeout break ");
                        logStringBot = $"\n[{DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")}][Status: WatchDog timeout break]";
                        File.AppendAllText(logFileBot, logStringBot);

                        break;
                    }
                }

                // регистрируем в логах штатный выход из внутреннего цикла, ждём 0.1 сек и перезапускаем сеанс
                Console.WriteLine($"{DateTime.Now.ToString()} inner cycle exited. try to restart ");
                logStringBot = $"\n[{DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")}][Status: inner cycle exited. try to restart]";
                File.AppendAllText(logFileBot, logStringBot);

                Thread.Sleep(100);
            }
        }
Example #43
0
		/// <summary>
		/// Методы для работы со статистикой.
		/// </summary>
		/// <param name="vk">API.</param>
		internal StatsCategory(VkApi vk)
		{
			_vk = vk;
		}
Example #44
0
        public static List <People> GetPeopleFromAlbum(int SelectedAlbum, VkNet.Utils.VkCollection <PhotoAlbum> AllAlbums, VkApi api, DateTime TimeFrom, DateTime TimeTo)
        {
            ulong offset = 0, count = 500;

            List <VkNet.Model.Attachments.Photo> AllPhoto = new List <VkNet.Model.Attachments.Photo>();

            try {
                while (true)
                {
                    var photos = api.Photo.Get(new PhotoGetParams {
                        OwnerId = AllAlbums[SelectedAlbum].OwnerId, Extended = true, Count = count, Offset = offset, AlbumId = VkNet.Enums.SafetyEnums.PhotoAlbumType.Id(AllAlbums[SelectedAlbum].Id)
                    });
                    for (int i = 0; i < photos.Count; i++)
                    {
                        AllPhoto.Add(photos[i]);
                    }
                    if (AllPhoto.Count == AllAlbums[SelectedAlbum].Size)
                    {
                        break;
                    }
                    else if (AllPhoto.Count > AllAlbums[SelectedAlbum].Size)
                    {
                        throw new OutOfBorderPhotoException();
                    }
                    else
                    {
                        offset = offset + count;
                    }
                }
            }
            catch {
                throw new ErrorFindPhotoException(AllAlbums[SelectedAlbum].Title);
            }


            List <List <VkNet.Model.Comment> > AllComents = new List <List <VkNet.Model.Comment> >();

            for (int i = 0; i < AllPhoto.Count; i++)
            {
                AllComents.Add(new List <VkNet.Model.Comment>());
                if (AllPhoto[i].Comments.Count != 0)
                {
                    count  = 100;
                    offset = 0;
                    bool stop = true;
                    try {
                        while (true)
                        {
                            var Comments = api.Photo.GetComments(new PhotoGetCommentsParams {
                                Sort = VkNet.Enums.SafetyEnums.CommentsSort.Desc, Count = count, Offset = offset, OwnerId = AllAlbums[SelectedAlbum].OwnerId, PhotoId = (ulong)AllPhoto[i].Id
                            });
                            for (int j = 0; j < Comments.Count; j++)
                            {
                                if (Comments[j].Date >= TimeFrom && Comments[j].Date <= TimeTo)
                                {
                                    AllComents[i].Add(Comments[j]);
                                }
                                else
                                {
                                    stop = false;
                                    break;
                                }
                            }
                            if (AllComents[i].Count == AllPhoto[i].Comments.Count || !stop)
                            {
                                break;
                            }
                            else if (AllComents[i].Count > AllPhoto[i].Comments.Count)
                            {
                                throw new OutOfBorderCommentsException();
                            }
                            else
                            {
                                offset = offset + count;
                            }
                        }
                    }
                    catch {
                        throw new ErrorFindCommentsException(i, AllAlbums[SelectedAlbum].Title);
                    }
                }
            }
            List <People> peoples = new List <People>();

            for (int i = 0; i < AllComents.Count; i++)
            {
                for (int j = 0; j < AllComents[i].Count; j++)
                {
                    People buff;
                    if ((buff = peoples.Find(x => x.Id == AllComents[i][j].FromId)) != null)
                    {
                        buff.CommentsText[i].Add(AllComents[i][j].Text);
                        buff.CommentsData[i].Add(AllComents[i][j].Date.Value);
                    }
                    else
                    {
                        peoples.Add(new People(AllComents.Count, "", AllComents[i][j].FromId));
                        peoples[peoples.Count - 1].CommentsText[i].Add(AllComents[i][j].Text);
                        peoples[peoples.Count - 1].CommentsData[i].Add(AllComents[i][j].Date.Value);
                    }
                }
            }
            return(peoples);
        }
Example #45
0
 internal VideoCategory(VkApi vk)
 {
     _vk = vk;
 }
Example #46
0
        public static void deleteComments(int selectedIndex, VkNet.Utils.VkCollection <PhotoAlbum> AllAlbums, VkApi api, DateTime TimeFrom2, DateTime TimeTo2)
        {
            ulong offset = 0, count = 500;
            List <VkNet.Model.Attachments.Photo> AllPhoto = new List <VkNet.Model.Attachments.Photo>();

            try {
                while (true)
                {
                    var photos = api.Photo.Get(new PhotoGetParams {
                        OwnerId = AllAlbums[selectedIndex].OwnerId, Extended = true, Count = count, Offset = offset, AlbumId = VkNet.Enums.SafetyEnums.PhotoAlbumType.Id(AllAlbums[selectedIndex].Id)
                    });
                    for (int i = 0; i < photos.Count; i++)
                    {
                        AllPhoto.Add(photos[i]);
                    }
                    if (AllPhoto.Count == AllAlbums[selectedIndex].Size)
                    {
                        break;
                    }
                    else if (AllPhoto.Count > AllAlbums[selectedIndex].Size)
                    {
                        throw new OutOfBorderPhotoException();
                    }
                    else
                    {
                        offset = offset + count;
                    }
                }
            }
            catch (Exception ex) {
                throw new ErrorFindPhotoException(AllAlbums[selectedIndex].Title, "ErrorFindPhotoException. " + ex.ToString());
            }

            for (int i = 0; i < AllPhoto.Count; i++)
            {
                if (AllPhoto[i].Comments.Count != 0)
                {
                    count  = 100;
                    offset = 0;
                    int  delete_comment = 0;
                    bool stop           = true;
                    try {
                        while (true)
                        {
                            var Comments = api.Photo.GetComments(new PhotoGetCommentsParams {
                                Sort = VkNet.Enums.SafetyEnums.CommentsSort.Desc, Count = count, Offset = offset, OwnerId = AllAlbums[selectedIndex].OwnerId, PhotoId = (ulong)AllPhoto[i].Id
                            });
                            for (int j = 0; j < Comments.Count; j++)
                            {
                                if (Comments[j].Date >= TimeFrom2 && Comments[j].Date <= TimeTo2)
                                {
                                    api.Photo.DeleteComment(commentId: Convert.ToUInt64(Comments[j].Id), ownerId: -167157478);
                                    delete_comment++;
                                }
                                else
                                {
                                    if (Comments[j].Date < TimeFrom2)
                                    {
                                        stop = false;
                                        break;
                                    }
                                }
                            }

                            if (!stop || Comments.Count == 0)
                            {
                                break;
                            }
                            else
                            {
                                offset = offset + count;
                            }
                        }
                    }
                    catch (Exception ex) {
                        throw new ErrorFindCommentsException(i, AllAlbums[selectedIndex].Title, "ErrorFindCommentsException. " + ex.ToString());
                    }
                }
            }
        }
Example #47
0
 internal DocsCategoryExtended(DocsCategory docsCategory, VkApi vk)
 {
     _docs = docsCategory;
     _vk = vk;
 }
 public override void Execute(RootObject update, VkApi client, SqlConnection Con)
 {
 }
Example #49
0
		/// <summary>
		/// API для работы с лайками.
		/// </summary>
		/// <param name="vk">The vk.</param>
		internal LikesCategory(VkApi vk)
		{
			_vk = vk;
		}
        public override void ExecutePL(RootObject update, VkApi client, SqlConnection Con)
        {
            MessagesSendParams @params = new MessagesSendParams();
            var        chatId          = [email protected]_id;
            var        keyboardBuilder = new KeyboardBuilder().Clear();
            UserObject user            = new UserObject();
            UInt64     lvlExp          = 100;
            int        i = 0;

            try
            {
                SqlCommand getUser = new SqlCommand("SELECT * FROM Users WHERE chatId = @chatId;", Con);
                getUser.Parameters.AddWithValue("@chatId", chatId);
                SqlDataReader rgetUser = getUser.ExecuteReader();
                rgetUser.Read();
                user.state = Convert.ToInt32(rgetUser["state"]);
                user.study = Convert.ToInt32(rgetUser["study"]);
                rgetUser.Close();

                if (user.study == 1)
                {
                    SqlCommand updTag = new SqlCommand("UPDATE Users SET tag = @tag WHERE chatId = @chatId;", Con);
                    updTag.Parameters.AddWithValue("@chatId", chatId);
                    updTag.Parameters.AddWithValue("@tag", "Новичок - Обучение - ДокУслуги");
                    //updTag.Parameters.AddWithValue("@state", 2);
                    updTag.ExecuteNonQuery();

                    @params.Keyboard = keyboardBuilder.Build();
                    @params.UserId   = chatId;
                    @params.Message  =
                        "ДокУслуги - позаимствованная с Земли технология. На нашей планете она телепортирует документы за считанные секунды🚀";
                    @params.RandomId = GetRandomId();
                    client.Messages.SendAsync(@params);

                    Thread.Sleep(1000);
                    keyboardBuilder
                    .AddButton("Получить паспорт", "selectGetPassport", KeyboardButtonColor.Positive);

                    @params.Message  = "🎓 Давай получим паспорт и проверим скорость работы сервиса!";
                    @params.Keyboard = keyboardBuilder.Build();
                    @params.UserId   = chatId;
                    @params.RandomId = GetRandomId();
                    client.Messages.SendAsync(@params);
                }
                else
                {
                    SqlCommand updTag = new SqlCommand("UPDATE Users SET tag = @tag WHERE chatId = @chatId;", Con);
                    updTag.Parameters.AddWithValue("@chatId", chatId);
                    updTag.Parameters.AddWithValue("@tag", "Новичок - Обучение - ДокУслуги");
                    //updTag.Parameters.AddWithValue("@state", 2);
                    updTag.ExecuteNonQuery();

                    @params.Keyboard = keyboardBuilder.Build();
                    @params.UserId   = chatId;
                    @params.Message  =
                        "ДокУслуги - позаимствованная с Земли технология. На нашей планете она телепортирует документы за считанные секунды🚀";
                    @params.RandomId = GetRandomId();
                    client.Messages.SendAsync(@params);
                }
            }
            catch (Exception ee)
            {
                @params.Message     = "Ошибка в SelectHomeCommand: " + ee.Message;
                @params.Attachments = null;
                @params.Keyboard    = null;
                @params.UserId      = 59111081;
                @params.RandomId    = GetRandomId();
                client.Messages.SendAsync(@params);
            }
        }
Example #51
0
 /// <summary>
 /// Методы для работы с новостной лентой пользователя.
 /// </summary>
 /// <param name="vk">API.</param>
 internal NewsFeedCategory(VkApi vk)
 {
     _vk = vk;
 }
 public APIController(IHostingEnvironment _environment, IHttpContextAccessor _httpContextAccessor,
                      IMemoryCache _memoryCache, IOptions <AppSetting> _appSettings, VkApi vkApi, UnitOfWork <ApplicationDbContext> _unit) :
     base(_environment, _httpContextAccessor, _memoryCache, _appSettings)
 {
     VkApi = vkApi;
     Unit  = _unit;
 }
Example #53
0
 internal GroupsCategory(VkApi vk)
 {
     _vk = vk;
 }
Example #54
0
 public ResponserBotAdmin(string _confirmation, long _groupId, VkApi _vkApi) : base(_confirmation, _groupId, _vkApi)
 {
     keyboardBuilder.AddButton("current_time", "", VkNet.Enums.SafetyEnums.KeyboardButtonColor.Negative);
     keyboardBuilder.AddLine();
 }
 internal StatusCategoryExtended(StatusCategory statusCategory, VkApi vk)
 {
     _status = statusCategory;
     _vk = vk;
 }
Example #56
0
 /// <summary>
 /// Методы для работы с новостной лентой пользователя.
 /// </summary>
 /// <param name="vk">API.</param>
 internal NewsFeedCategory(VkApi vk)
 {
     _vk = vk;
 }
Example #57
0
 public void GetUserSettings_EmptyAccessToken_ThrowAccessTokenInvalidException()
 {
     var vk = new VkApi();
     This.Action(() => vk.Users.GetUserSettings(100)).Throws<AccessTokenInvalidException>();
 }
Example #58
0
 internal WallCategory(VkApi vk)
 {
     _vk = vk;
 }
Example #59
0
 public void Search_EmptyQuery_ThrowArgumentException()
 {
     int count;
     var vk = new VkApi { AccessToken = "token" };
     This.Action(() => vk.Users.Search("", out count)).Throws<ArgumentException>()
         .Message.ShouldEqual("Query can not be null or empty.");
 }
Example #60
0
 public VkPostsReader(VkApi api)
 {
     this.api = api;
 }