private static async Task UserUnblock(IServiceProvider serviceProvider, DatabaseContext context, CallbackMessage message) { var innerMessage = message.Object.ToObject <UserUnblock>(); var vkPoolService = serviceProvider.GetService <VkPoolService>(); var subscriber = await VkHelper.CreateSubscriber(context, vkPoolService, message.IdGroup, innerMessage.IdUser); if (subscriber == null) { return; } subscriber.IsBlocked = false; await context.History_GroupActions.AddAsync(new History_GroupActions() { ActionType = (int)Models.Database.Common.GroupActionTypes.Unblocked, IdGroup = message.IdGroup, IdSubscriber = subscriber.Id, Dt = DateTime.UtcNow }); await context.SaveChangesAsync(); }
private static async Task GroupJoin(IServiceProvider serviceProvider, DatabaseContext context, CallbackMessage message) { var innerMessage = message.Object.ToObject <GroupJoin>(); if (!innerMessage.IdUser.HasValue || innerMessage.IdUser.Value <= 0) { return; } var vkPoolService = serviceProvider.GetService <VkPoolService>(); var subscriber = await VkHelper.CreateSubscriber(context, vkPoolService, message.IdGroup, innerMessage.IdUser); if (subscriber == null) { return; } subscriber.IsUnsubscribed = false; subscriber.DtUnsubscribe = null; subscriber.IsSubscribedToGroup = true; await context.History_GroupActions.AddAsync(new History_GroupActions() { ActionType = (int)Models.Database.Common.GroupActionTypes.JoinGroup, IdGroup = message.IdGroup, IdSubscriber = subscriber.Id, Dt = DateTime.UtcNow }); await context.SaveChangesAsync(); }
private static async Task MessagesDeny(IServiceProvider serviceProvider, DatabaseContext context, CallbackMessage message) { var innerMessage = VkNet.Model.Message.FromJson(new VkNet.Utils.VkResponse(message.Object)); var vkPoolService = serviceProvider.GetService <VkPoolService>(); var subscriber = await VkHelper.CreateSubscriber(context, vkPoolService, message.IdGroup, innerMessage.UserId); if (subscriber == null) { return; } if (!subscriber.IsChatAllowed.HasValue || subscriber.IsChatAllowed.Value) { subscriber.IsChatAllowed = false; } await context.History_GroupActions.AddAsync(new History_GroupActions() { ActionType = (int)Models.Database.Common.GroupActionTypes.BlockMessaging, IdGroup = message.IdGroup, IdSubscriber = subscriber.Id, Dt = DateTime.UtcNow }); await context.SaveChangesAsync(); }
private static async Task WallPostNew(IServiceProvider serviceProvider, DatabaseContext context, CallbackMessage message) { if (await IsPassedCallbackMessage(context, message)) { return; } var newPost = VkNet.Model.Post.FromJson(new VkNet.Utils.VkResponse(message.Object)); if (!newPost.Id.HasValue || await context.WallPosts.AnyAsync(x => x.IdGroup == message.IdGroup && x.IdVk == newPost.Id)) { return; } var newWallPost = new WallPosts() { DtAdd = newPost.Date ?? DateTime.UtcNow, IdGroup = message.IdGroup, IdVk = newPost.Id.Value, Text = newPost.Text }; await context.WallPosts.AddAsync(newWallPost); await context.SaveChangesAsync(); var vkPoolService = serviceProvider.GetService <VkPoolService>(); var subscriber = await VkHelper.CreateSubscriber(context, vkPoolService, message.IdGroup, newPost.FromId); if (subscriber == null) { return; } await context.History_WallPosts.AddAsync(new History_WallPosts() { Dt = DateTime.UtcNow, IdPost = newWallPost.Id, IdSubscriber = subscriber.Id, IsRepost = false }); await context.SaveChangesAsync(); }
private static async Task MessageNew(IServiceProvider serviceProvider, DatabaseContext context, CallbackMessage message) { if (await IsPassedCallbackMessage(context, message)) { return; } var innerMessage = VkNet.Model.Message.FromJson(new VkNet.Utils.VkResponse(message.Object)); var vkPoolService = serviceProvider.GetService <VkPoolService>(); var subscriber = await VkHelper.CreateSubscriber(context, vkPoolService, message.IdGroup, innerMessage.UserId); if (subscriber == null) { return; } await context.History_Messages.AddAsync(new History_Messages() { Dt = DateTime.UtcNow, IsOutgoingMessage = false, IdSubscriber = subscriber.Id, Text = innerMessage.Body }); bool isCancelMessaging = innerMessage.Body?.ToLower() == "стоп"; if (!isCancelMessaging && (!subscriber.IsChatAllowed.HasValue || !subscriber.IsChatAllowed.Value)) { await context.History_GroupActions.AddAsync(new History_GroupActions() { ActionType = (int)Models.Database.Common.GroupActionTypes.AcceptMessaging, IdGroup = message.IdGroup, IdSubscriber = subscriber.Id, Dt = DateTime.UtcNow }); subscriber.IsChatAllowed = true; } await context.SaveChangesAsync(); var vkApi = await vkPoolService.GetGroupVkApi(message.IdGroup); if (isCancelMessaging) { await context.History_GroupActions.AddAsync(new History_GroupActions() { ActionType = (int)Models.Database.Common.GroupActionTypes.CancelMessaging, IdGroup = message.IdGroup, IdSubscriber = subscriber.Id, Dt = DateTime.UtcNow }); if (!subscriber.IsChatAllowed.HasValue || subscriber.IsChatAllowed.Value) { subscriber.IsChatAllowed = false; if (vkApi != null) { await context.History_Messages.AddAsync(new History_Messages() { Dt = DateTime.UtcNow, IsOutgoingMessage = true, IdSubscriber = subscriber.Id, Text = "Вы успешно отписаны от сообщений группы" }); await vkApi.Messages.SendAsync(new VkNet.Model.RequestParams.MessagesSendParams() { Message = "Вы успешно отписаны от сообщений группы", UserId = innerMessage.UserId }); } } await context.SaveChangesAsync(); return; } if (vkApi == null) { return; } var replyToMessageResult = await CallbackHelper.ReplyToMessage(context, message.IdGroup, subscriber.Id, innerMessage); if (replyToMessageResult == null) { return; } if (replyToMessageResult.Item1.HasValue) { var _configuration = serviceProvider.GetService <IConfiguration>(); var messageHelper = new MessageHelper(_configuration, context); await messageHelper.SendMessages(vkApi, message.IdGroup, replyToMessageResult.Item1.Value, innerMessage.UserId.Value); await context.History_Messages.AddAsync(new History_Messages() { Dt = DateTime.UtcNow, IsOutgoingMessage = true, IdSubscriber = subscriber.Id, IdMessage = replyToMessageResult.Item1 }); await context.SaveChangesAsync(); } else if (replyToMessageResult.Item2) { await vkApi.Messages.MarkAsReadAsync(innerMessage.UserId.ToString(), groupId : message.IdGroup); } }
private static async Task WallRepost(IServiceProvider serviceProvider, DatabaseContext context, CallbackMessage message) { if (await IsPassedCallbackMessage(context, message)) { return; } var repost = VkNet.Model.Wall.FromJson(new VkNet.Utils.VkResponse(message.Object)); if (!repost.FromId.HasValue || repost.FromId.Value <= 0) { return; } var repostedPost = repost.CopyHistory.FirstOrDefault(); var post = await context.WallPosts.FirstOrDefaultAsync(x => x.IdGroup == message.IdGroup && x.IdVk == repostedPost.Id); if (post == null) { post = new WallPosts() { DtAdd = repostedPost.Date ?? DateTime.UtcNow, IdGroup = message.IdGroup, IdVk = repostedPost.Id.Value, }; await context.WallPosts.AddAsync(post); await context.SaveChangesAsync(); } var vkPoolService = serviceProvider.GetService <VkPoolService>(); var subscriber = await VkHelper.CreateSubscriber(context, vkPoolService, message.IdGroup, repost.FromId); if (subscriber == null) { return; } bool hasSubscriberRepost = await context.SubscriberReposts .AnyAsync(x => x.WallPost.IdVk == repostedPost.Id && x.Subscriber.IdVkUser == subscriber.IdVkUser && x.DtRepost == repost.Date); if (!hasSubscriberRepost) { await context.SubscriberReposts.AddAsync(new SubscriberReposts() { DtRepost = repost.Date ?? DateTime.UtcNow, IdPost = post.Id, IdSubscriber = subscriber.Id, Text = repost.Text, }); } await context.History_WallPosts.AddAsync(new History_WallPosts() { Dt = DateTime.UtcNow, IdPost = post.Id, IdSubscriber = subscriber.Id, IsRepost = true }); await context.SaveChangesAsync(); }