Пример #1
0
        public async Task NewMessageEvent(KahlaUser receiver, Conversation conversation, string content, KahlaUser sender, bool alert)
        {
            var token = await _appsContainer.AccessToken();

            var channel         = receiver.CurrentChannel;
            var newMessageEvent = new NewMessageEvent
            {
                ConversationId = conversation.Id,
                Sender         = sender,
                Content        = content,
                AESKey         = conversation.AESKey,
                Muted          = !alert
            };
            var pushTasks = new List <Task>();

            if (channel != -1)
            {
                pushTasks.Add(_stargatePushService.PushMessageAsync(token, channel, _Serialize(newMessageEvent), true));
            }
            if (alert && receiver.Id != sender.Id)
            {
                pushTasks.Add(_thirdPartyPushService.PushAsync(receiver.Id, sender.Email, _Serialize(newMessageEvent)));
            }
            await Task.WhenAll(pushTasks);
        }
Пример #2
0
        public async Task RefreshUserProfile()
        {
            BotLogger.LogInfo($"Getting account profile...");
            var profile = await AuthService.MeAsync();

            Profile = profile.Value;
        }
Пример #3
0
        public async Task NewFriendRequestEvent(KahlaUser target, Request request)
        {
            var token = await _appsContainer.AccessToken();

            var newFriendRequestEvent = new NewFriendRequestEvent
            {
                Request = request
            };

            if (target.CurrentChannel > 0)
            {
                _cannonService.FireAsync <PushMessageService>(s => s.PushMessageAsync(token, target.CurrentChannel, newFriendRequestEvent));
            }
            _cannonService.FireAsync <ThirdPartyPushService>(s => s.PushAsync(target.HisDevices, newFriendRequestEvent));
        }
Пример #4
0
        public async Task NewFriendRequestEvent(KahlaUser target, Request request)
        {
            var token = await _appsContainer.AccessToken();

            var newFriendRequestEvent = new NewFriendRequestEvent
            {
                Request = request
            };

            if (target.CurrentChannel != -1)
            {
                await _stargatePushService.PushMessageAsync(token, target.CurrentChannel, JsonConvert.SerializeObject(newFriendRequestEvent), true);
            }
            await _thirdPartyPushService.PushAsync(target.HisDevices, "*****@*****.**", JsonConvert.SerializeObject(newFriendRequestEvent));
        }
Пример #5
0
        public async Task DissolveEvent(KahlaUser receiver, int conversationId)
        {
            var token = await _appsContainer.AccessToken();

            var channel      = receiver.CurrentChannel;
            var dissolvevent = new DissolveEvent
            {
                ConversationId = conversationId
            };

            if (channel != -1)
            {
                await _stargatePushService.PushMessageAsync(token, channel, JsonConvert.SerializeObject(dissolvevent), true);
            }
        }
Пример #6
0
        public async Task DissolveEvent(KahlaUser receiver, int conversationId)
        {
            var token = await _appsContainer.AccessToken();

            var channel      = receiver.CurrentChannel;
            var dissolvevent = new DissolveEvent
            {
                ConversationId = conversationId
            };

            if (channel > 0)
            {
                _cannonService.FireAsync <PushMessageService>(s => s.PushMessageAsync(token, channel, dissolvevent));
            }
        }
Пример #7
0
        public async Task SomeoneLeftEvent(KahlaUser receiver, KahlaUser leftMember, int conversationId)
        {
            var token = await _appsContainer.AccessToken();

            var channel          = receiver.CurrentChannel;
            var someoneLeftEvent = new SomeoneLeftEvent
            {
                LeftUser       = leftMember,
                ConversationId = conversationId
            };

            if (channel != -1)
            {
                await _stargatePushService.PushMessageAsync(token, channel, JsonConvert.SerializeObject(someoneLeftEvent), true);
            }
        }
Пример #8
0
        public async Task NewMemberEvent(KahlaUser receiver, KahlaUser newMember, int conversationId)
        {
            var token = await _appsContainer.AccessToken();

            var channel        = receiver.CurrentChannel;
            var newMemberEvent = new NewMemberEvent
            {
                NewMember      = newMember,
                ConversationId = conversationId
            };

            if (channel > 0)
            {
                _cannonService.FireAsync <StargatePushService>(s => s.PushMessageAsync(token, channel, newMemberEvent), async(e) => await HandleError(e));
            }
        }
Пример #9
0
        public async Task FriendAcceptedEvent(KahlaUser receiver, KahlaUser accepter)
        {
            var token = await _appsContainer.AccessToken();

            var channel             = receiver.CurrentChannel;
            var friendAcceptedEvent = new FriendAcceptedEvent
            {
                Target = accepter
            };

            if (channel != -1)
            {
                await _stargatePushService.PushMessageAsync(token, channel, JsonConvert.SerializeObject(friendAcceptedEvent), true);
            }
            await _thirdPartyPushService.PushAsync(receiver.Id, "*****@*****.**", JsonConvert.SerializeObject(friendAcceptedEvent));
        }
Пример #10
0
        public async Task TimerUpdatedEvent(KahlaUser receiver, int newTimer, int conversationId)
        {
            var token = await _appsContainer.AccessToken();

            var channel           = receiver.CurrentChannel;
            var timerUpdatedEvent = new TimerUpdatedEvent
            {
                NewTimer       = newTimer,
                ConversationId = conversationId
            };

            if (channel > 0)
            {
                _cannonService.FireAsync <PushMessageService>(s => s.PushMessageAsync(token, channel, timerUpdatedEvent));
            }
        }
Пример #11
0
        public async Task WereDeletedEvent(KahlaUser receiver, KahlaUser trigger)
        {
            var token = await _appsContainer.AccessToken();

            var channel          = receiver.CurrentChannel;
            var wereDeletedEvent = new WereDeletedEvent
            {
                Trigger = trigger
            };

            if (channel != -1)
            {
                await _stargatePushService.PushMessageAsync(token, channel, _Serialize(wereDeletedEvent), true);
            }
            await _thirdPartyPushService.PushAsync(receiver.Id, "*****@*****.**", _Serialize(wereDeletedEvent));
        }
Пример #12
0
        public async Task SomeoneLeftEvent(KahlaUser receiver, KahlaUser leftMember, int conversationId)
        {
            var token = await _appsContainer.AccessToken();

            var channel          = receiver.CurrentChannel;
            var someoneLeftEvent = new SomeoneLeftEvent
            {
                LeftUser       = leftMember,
                ConversationId = conversationId
            };

            if (channel > 0)
            {
                _cannonService.FireAsync <PushMessageService>(s => s.PushMessageAsync(token, channel, someoneLeftEvent));
            }
        }
Пример #13
0
        public async Task TimerUpdatedEvent(KahlaUser receiver, int newTimer, int conversationId)
        {
            var token = await _appsContainer.AccessToken();

            var channel           = receiver.CurrentChannel;
            var timerUpdatedEvent = new TimerUpdatedEvent
            {
                NewTimer       = newTimer,
                ConversationId = conversationId
            };

            if (channel != -1)
            {
                await _stargatePushService.PushMessageAsync(token, channel, _Serialize(timerUpdatedEvent), true);
            }
        }
Пример #14
0
        public async Task NewFriendRequestEvent(KahlaUser receiver, KahlaUser requester)
        {
            var token = await _appsContainer.AccessToken();

            var channel = receiver.CurrentChannel;
            var newFriendRequestEvent = new NewFriendRequestEvent
            {
                RequesterId = requester.Id,
                Requester   = requester
            };

            if (channel != -1)
            {
                await _stargatePushService.PushMessageAsync(token, channel, _Serialize(newFriendRequestEvent), true);
            }
            await _thirdPartyPushService.PushAsync(receiver.Id, requester.Email, _Serialize(newFriendRequestEvent));
        }
Пример #15
0
        public async Task GroupJoinedEvent(KahlaUser receiver, GroupConversation createdConversation, Message latestMessage, int messageCount)
        {
            var token = await _appsContainer.AccessToken();

            var channel          = receiver.CurrentChannel;
            var groupJoinedEvent = new GroupJoinedEvent
            {
                CreatedConversation = createdConversation,
                LatestMessage       = latestMessage,
                MessageCount        = messageCount
            };

            if (channel != -1)
            {
                await _stargatePushService.PushMessageAsync(token, channel, JsonConvert.SerializeObject(groupJoinedEvent), true);
            }
        }
Пример #16
0
        public async Task FriendsChangedEvent(KahlaUser target, Request request, bool result, PrivateConversation conversation)
        {
            var token = await _appsContainer.AccessToken();

            var friendAcceptedEvent = new FriendsChangedEvent
            {
                Request             = request,
                Result              = result,
                CreatedConversation = conversation
            };

            if (target.CurrentChannel != -1)
            {
                await _stargatePushService.PushMessageAsync(token, target.CurrentChannel, JsonConvert.SerializeObject(friendAcceptedEvent), true);
            }
            await _thirdPartyPushService.PushAsync(target.HisDevices, "*****@*****.**", JsonConvert.SerializeObject(friendAcceptedEvent));
        }
Пример #17
0
        public async Task FriendsChangedEvent(KahlaUser target, Request request, bool result, PrivateConversation conversation)
        {
            var token = await _appsContainer.AccessToken();

            var friendAcceptedEvent = new FriendsChangedEvent
            {
                Request             = request,
                Result              = result,
                CreatedConversation = conversation
            };

            if (target.CurrentChannel > 0)
            {
                _cannonService.FireAsync <PushMessageService>(s => s.PushMessageAsync(token, target.CurrentChannel, friendAcceptedEvent));
            }
            _cannonService.FireAsync <ThirdPartyPushService>(s => s.PushAsync(target.HisDevices, friendAcceptedEvent));
        }
Пример #18
0
        public async Task GroupJoinedEvent(KahlaUser receiver, GroupConversation createdConversation, Message latestMessage, int messageCount)
        {
            var token = await _appsContainer.AccessToken();

            var channel          = receiver.CurrentChannel;
            var groupJoinedEvent = new GroupJoinedEvent
            {
                CreatedConversation = createdConversation,
                LatestMessage       = latestMessage,
                MessageCount        = messageCount
            };

            if (channel > 0)
            {
                _cannonService.FireAsync <PushMessageService>(s => s.PushMessageAsync(token, channel, groupJoinedEvent));
            }
        }
Пример #19
0
        public async Task FriendDeletedEvent(int stargateChannel, IEnumerable <Device> devices, KahlaUser trigger, int deletedConversationId)
        {
            var token = await _appsContainer.AccessToken();

            var friendDeletedEvent = new FriendDeletedEvent
            {
                Trigger        = trigger,
                ConversationId = deletedConversationId
            };

            if (stargateChannel > 0)
            {
                _cannonService.FireAsync <PushMessageService>(s => s.PushMessageAsync(token, stargateChannel, friendDeletedEvent));
            }
            _cannonService.FireAsync <ThirdPartyPushService>(s => s.PushAsync(devices, friendDeletedEvent));
        }
Пример #20
0
        public async Task FriendDeletedEvent(int stargateChannel, IEnumerable <Device> devices, KahlaUser trigger, int deletedConversationId)
        {
            var token = await _appsContainer.AccessToken();

            var friendDeletedEvent = new FriendDeletedEvent
            {
                Trigger        = trigger,
                ConversationId = deletedConversationId
            };

            if (stargateChannel != -1)
            {
                await _stargatePushService.PushMessageAsync(token, stargateChannel, JsonConvert.SerializeObject(friendDeletedEvent), true);
            }
            await _thirdPartyPushService.PushAsync(devices, "*****@*****.**", JsonConvert.SerializeObject(friendDeletedEvent));
        }
Пример #21
0
        public async Task <string> BuildEmail(KahlaUser user, KahlaDbContext dbContext, string domain)
        {
            int totalUnread = 0, inConversations = 0;
            var conversations = await dbContext.MyContacts(user.Id).ToListAsync();

            var msg = new StringBuilder();

            foreach (var contact in conversations)
            {
                // Ignore conversations muted.
                if (contact.Discriminator == nameof(GroupConversation))
                {
                    if (contact.Muted)
                    {
                        continue;
                    }
                }
                var currentUnread = contact.UnReadAmount;
                if (currentUnread <= 0)
                {
                    continue;
                }

                totalUnread += currentUnread;
                inConversations++;
                if (inConversations == 20)
                {
                    msg.AppendLine("<li>Some conversations haven't been displayed because there are too many items.</li>");
                }
                else if (inConversations > 20)
                {
                    // append nothing to avoid email too large.
                }
                else
                {
                    msg.AppendLine($"<li>{currentUnread} unread message{AppendS(currentUnread)} in {(contact.Discriminator == nameof(GroupConversation) ? "group" : "friend")} <a href=\"{domain}/talking/{contact.ConversationId}\">{contact.DisplayName}</a>.</li>");
                }
            }
            var pendingRequests = await dbContext
                                  .Requests
                                  .AsNoTracking()
                                  .Where(t => t.TargetId == user.Id)
                                  .CountAsync(t => t.Completed == false);

            if (inConversations > 0 || pendingRequests > 0)
            {
                if (inConversations > 0)
                {
                    msg.Insert(0,
                               $"<h4>You have {totalUnread} unread message{AppendS(totalUnread)} in {inConversations} conversation{AppendS(inConversations)} from your Kahla friends!<h4>\r\n<ul>\r\n");
                    msg.AppendLine("</ul>");
                }

                if (pendingRequests > 0)
                {
                    msg.AppendLine($"<h4>You have {pendingRequests} pending friend request{AppendS(pendingRequests)} in Kahla.<h4>");
                }

                msg.AppendLine($"Click to <a href='{domain}'>Open Kahla Now</a>.");
                msg.AppendLine($"<br><p>Click <a href='{domain}/advanced-setting'>here</a> to unsubscribe all notifications.</p>");
                return(msg.ToString());
            }
            return(string.Empty);
        }
Пример #22
0
        public async Task <string> BuildEmail(KahlaUser user, KahlaDbContext dbContext, IConfiguration configuration)
        {
            int totalUnread = 0, inConversations = 0;
            var conversations = await dbContext.MyConversations(user.Id);

            var msg = new StringBuilder();

            foreach (var conversation in conversations)
            {
                // Ignore conversations muted.
                if (conversation is GroupConversation currentGroup)
                {
                    var relation = currentGroup
                                   .Users
                                   .FirstOrDefault(t => t.UserId == user.Id);
                    if (relation.Muted)
                    {
                        continue;
                    }
                }
                var currentUnread = conversation.GetUnReadAmount(user.Id);
                if (currentUnread <= 0)
                {
                    continue;
                }

                totalUnread += currentUnread;
                inConversations++;
                if (inConversations == 20)
                {
                    msg.AppendLine("<li>Some conversations haven't been displayed because there are too many items.</li>");
                }
                else if (inConversations > 20)
                {
                    // append nothing to avoid email too large.
                }
                else
                {
                    msg.AppendLine($"<li>{currentUnread} unread message{AppendS(currentUnread)} in {(conversation is GroupConversation ? "group" : "friend")} <a href=\"{configuration["AppDomain"]}/talking/{conversation.Id}\">{conversation.GetDisplayName(user.Id)}</a>.</li>");
                }
            }
            var pendingRequests = await dbContext
                                  .Requests
                                  .AsNoTracking()
                                  .Where(t => t.TargetId == user.Id)
                                  .CountAsync(t => t.Completed == false);

            if (inConversations > 0 || pendingRequests > 0)
            {
                if (inConversations > 0)
                {
                    msg.Insert(0,
                               $"<h4>You have {totalUnread} unread message{AppendS(totalUnread)} in {inConversations} conversation{AppendS(inConversations)} from your Kahla friends!<h4>\r\n<ul>\r\n");
                    msg.AppendLine("</ul>");
                }

                if (pendingRequests > 0)
                {
                    msg.AppendLine($"<h4>You have {pendingRequests} pending friend request{AppendS(pendingRequests)} in Kahla.<h4>");
                }

                msg.AppendLine($"Click to <a href='{configuration["AppDomain"]}'>Open Kahla Now</a>.");
                return(msg.ToString());
            }
            return(string.Empty);
        }
Пример #23
0
        public async Task NewMessageEvent(string recieverId, int conversationId, string Content, KahlaUser sender)
        {
            var token = await _appsContainer.AccessToken();

            var user = await _dbContext.Users.FindAsync(recieverId);

            var channel = user.CurrentChannel;
            var nevent  = new NewMessageEvent
            {
                Type           = EventType.NewMessage,
                ConversationId = conversationId,
                Sender         = sender,
                Content        = Content
            };

            if (channel != -1)
            {
                await _pushMessageService.PushMessageAsync(token, channel, _CammalSer(nevent), true);
            }
        }
Пример #24
0
 protected string Mention(KahlaUser target)
 {
     return($" @{target.NickName.Replace(" ", "")}");
 }
Пример #25
0
        public async Task NewFriendRequestEvent(int stargateChannel, IEnumerable <Device> devices, KahlaUser requester, int requestId)
        {
            var token = await _appsContainer.AccessToken();

            var newFriendRequestEvent = new NewFriendRequestEvent
            {
                RequesterId = requester.Id,
                Requester   = requester,
                RequestId   = requestId
            };

            if (stargateChannel != -1)
            {
                await _stargatePushService.PushMessageAsync(token, stargateChannel, JsonConvert.SerializeObject(newFriendRequestEvent), true);
            }
            await _thirdPartyPushService.PushAsync(devices, requester.Email, JsonConvert.SerializeObject(newFriendRequestEvent));
        }