/// <summary>
        /// Render base message list
        /// </summary>
        public async void RenderMessages()
        {
            // Show loading indicator
            MessagesLoading.Visibility = Visibility.Visible;

            // Clear view
            _outofboundsNewMessage             = false;
            MoreNewMessageIndicator.Visibility = Visibility.Collapsed;
            MessageList.Items.Clear();

            // Retrieve message list
            IEnumerable <Message> emessages = null;
            await Task.Run(async() => { emessages = await RESTCalls.GetChannelMessages(ChannelId); });

            // Display messages
            if (emessages != null)
            {
                List <MessageContainer> messages = await MessageManager.ConvertMessage(emessages.ToList());

                AddMessages(Position.After, true, messages, true);
            }

            // Hide loading indicator
            MessagesLoading.Visibility = Visibility.Collapsed;
        }
Example #2
0
        private async void Pivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (pivot.SelectedIndex == 1 && !LoadingInvites)
            {
                InviteView.Items.Clear();
                NoInvites.Opacity     = 0;
                LoadingInvite.Opacity = 1;
                LoadingInvites        = true;
                IEnumerable <Invite> invites = null;
                await Task.Run(async() =>
                {
                    invites = await RESTCalls.GetChannelInvites(channelId);
                });

                if (invites != null)
                {
                    foreach (var invite in invites)
                    {
                        InviteView.Items.Add(invite);
                    }
                    LoadingInvite.Fade(0, 200).Start();
                }
                if (InviteView.Items.Count == 0)
                {
                    NoInvites.Fade(0.2f, 200).Start();
                    LoadingInvite.Fade(0, 200).Start();
                }
            }
        }
Example #3
0
        private async void InviteControl_OnDeleteInvite(object sender, EventArgs e)
        {
            string code = ((Invite)sender).String;
            await RESTCalls.DeleteInvite(code);

            InviteView.Items.Remove(InviteView.Items.FirstOrDefault(x => ((Invite)x).String == code));
        }
Example #4
0
        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            if (RedIcon.Opacity == 1)
            {
                return;
            }
            if (GreenIcon.Opacity == 1)
            {
                App.NavigateToGuild(DisplayedInvite.Guild.Id);
            }
            if (JoinIcon.Opacity == 1)
            {
                GreenIcon.Opacity   = 0;
                RedIcon.Opacity     = 0;
                JoinIcon.Opacity    = 0;
                ChannelName.Opacity = 0;
                GuildName.Opacity   = 0;
                Loading.Opacity     = 1;

                //DisplayedInvite = await RESTCalls.AcceptInvite(InviteCode); I guess this doesn't work or something...
                await RESTCalls.AcceptInvite(InviteCode);

                DisplayedInvite = await RESTCalls.GetInvite(InviteCode);

                DisplayedInvite.Uses++;
                LoadInvite(true);
            }
        }
        private async void SaveUserSettings()
        {
            var modify = new API.User.Models.ModifyUserSettings(LocalState.Settings);

            if (Filtering2.IsChecked == true)
            {
                modify.ExplicitContentFilter = 2;
            }
            else if (Filtering1.IsChecked == true)
            {
                modify.ExplicitContentFilter = 1;
            }
            else
            {
                modify.ExplicitContentFilter = 0;
            }

            //modify.FriendSourceFlag.All = FriendRequest0.IsChecked == true;
            //modify.FriendSourceFlag.MutualFriends = FriendRequest1.IsChecked == true;
            //modify.FriendSourceFlag.MutualGuilds = FriendRequest2.IsChecked == true;

            LocalState.Settings = await RESTCalls.ModifyUserSettings(modify);

            CloseButton_Click(null, null);
        }
        /// <summary>
        /// Load older messages
        /// </summary>
        private async void LoadOlderMessages()
        {
            // Prevent a second call
            DisableLoadingMessages = true;

            // Show loading indicator
            MessagesLoadingTop.Visibility = Visibility.Visible;

            // Get messages
            List <MessageContainer> messages = await MessageManager.ConvertMessage(
                (await RESTCalls.GetChannelMessagesBefore(ChannelId,
                                                          (MessageList.Items.FirstOrDefault(x => (x as MessageContainer).Message != null) as MessageContainer)
                                                          .Message.Id)).ToList());

            // Display Messages
            AddMessages(Position.Before, false, messages,
                        _outofboundsNewMessage); //if there is an out of bounds new message, show the indicator. Otherwise, don't.

            // Hide loaidng indicator
            MessagesLoadingTop.Visibility = Visibility.Collapsed;

            // Buffer perioud for loading more messages
            await Task.Delay(1000);

            DisableLoadingMessages = false;
        }
Example #7
0
        public static async void MessageUser(object sender, RoutedEventArgs e)
        {
            string channelid = null;

            foreach (var dm in LocalState.DMs)
            {
                if (dm.Value.Type == 1 && dm.Value.Users.FirstOrDefault()?.Id == (sender as MenuFlyoutItem).Tag.ToString())
                {
                    channelid = dm.Value.Id;
                }
            }
            if (channelid == null)
            {
                channelid = (await RESTCalls.CreateDM(new DiscordAPI.API.User.Models.CreateDM()
                {
                    Recipients = new List <string>()
                    {
                        (sender as MenuFlyoutItem).Tag.ToString()
                    }.AsEnumerable()
                })).Id;
            }
            if (string.IsNullOrEmpty(channelid))
            {
                return;
            }
            App.SelectGuildChannel("@me", channelid);
        }
        private async void SendMessageLink_Click(object sender, RoutedEventArgs e)
        {
            CloseButton_Click(null, null);
            string channelid = null;

            foreach (var dm in LocalState.DMs)
            {
                if (dm.Value.Type == 1 && dm.Value.Users.FirstOrDefault()?.Id == userid)
                {
                    channelid = dm.Value.Id;
                }
            }
            if (channelid == null)
            {
                channelid = (await RESTCalls.CreateDM(new API.User.Models.CreateDM()
                {
                    Recipients = new List <string>()
                    {
                        (sender as MenuFlyoutItem).Tag.ToString()
                    }.AsEnumerable()
                })).Id;
            }
            if (string.IsNullOrEmpty(channelid))
            {
                return;
            }
            App.SelectDMChannel(channelid);
        }
 private async void RemoveFriend(object sender, RoutedEventArgs e)
 {
     await Task.Run(async() =>
     {
         await RESTCalls.RemoveFriend(profile.user.Id);
     });
 }
Example #10
0
 private async void SendFriendRequest(object sender, RoutedEventArgs e)
 {
     await Task.Run(async() =>
     {
         await RESTCalls.SendFriendRequest(profile.user.Id);
     });
 }
Example #11
0
        /// <summary>
        /// Send Friend Request Button pressed
        /// </summary>
        private async void SendFriendRequest(object sender, RoutedEventArgs e)
        {
            // Split at Descriminator
            string[] strings = SendFriendTB.Text.Split('#');

            if (strings.Count() == 2)
            {
                // Send Friend Request
                SendFriendRequestResponse result =
                    await RESTCalls.SendFriendRequest(strings[0], Convert.ToInt32(strings[1]));

                if (result != null && result.Message != null)
                {
                    FriendRequestStatus.Text =
                        result.Message; //App.GetString(result.Message.Replace(' ', '\0')); //TODO: Translate
                }
                else
                {
                    FriendRequestStatus.Text = App.GetString("/Controls/Success");
                }
            }
            else
            {
                // Invalid input
                FriendRequestStatus.Text = App.GetString("/Controls/NeedDesc");
            }
        }
Example #12
0
        public static async void AddRole(object sender, RoutedEventArgs e)
        {
            var modify = new DiscordAPI.API.Guild.Models.ModifyGuildMember(LocalState.Guilds[App.CurrentGuildId].members[((sender as MenuFlyoutItem).Tag as Tuple <string, string>).Item2]);

            modify.ToggleRole((((sender as MenuFlyoutItem).Tag as Tuple <string, string>).Item1));
            await RESTCalls.ModifyGuildMember(App.CurrentGuildId, ((sender as MenuFlyoutItem).Tag as Tuple <string, string>).Item2, modify);
        }
Example #13
0
        public static async void StartGateway()
        {
            if (Gateway == null)
            {
                await RESTCalls.SetupToken();
            }
            //Ready
            Gateway.Ready += Gateway_Ready;
            //Message
            Gateway.MessageCreated += Gateway_MessageCreated;
            Gateway.MessageDeleted += Gateway_MessageDeleted;
            Gateway.MessageUpdated += Gateway_MessageUpdated;
            Gateway.MessageAck     += Gateway_MessageAck;
            //MessageReaction
            Gateway.MessageReactionAdded      += Gateway_MessageReactionAdded;
            Gateway.MessageReactionRemoved    += Gateway_MessageReactionRemoved;
            Gateway.MessageReactionRemovedAll += Gateway_MessageReactionRemovedAll;
            //DMs
            Gateway.DirectMessageChannelCreated += Gateway_DirectMessageChannelCreated;
            Gateway.DirectMessageChannelDeleted += Gateway_DirectMessageChannelDeleted;
            //GuildChannel
            Gateway.GuildChannelCreated += Gateway_GuildChannelCreated;
            Gateway.GuildChannelDeleted += Gateway_GuildChannelDeleted;
            Gateway.GuildChannelUpdated += Gateway_GuildChannelUpdated;
            //ChannelRecipientAdded is handled exclusively by MainPage
            //ChannelRecipientRemoved is handled exclusively by MainPage

            //Guild
            Gateway.GuildCreated += Gateway_GuildCreated;
            Gateway.GuildDeleted += Gateway_GuildDeleted;
            Gateway.GuildUpdated += Gateway_GuildUpdated;
            Gateway.GuildSynced  += Gateway_GuildSynced;
            //GuildMember
            Gateway.GuildMemberAdded   += Gateway_GuildMemberAdded;
            Gateway.GuildMemberChunk   += Gateway_GuildMemberChunk;
            Gateway.GuildMemberRemoved += Gateway_GuildMemberRemoved;
            Gateway.GuildMemberUpdated += Gateway_GuildMemberUpdated;
            //GuildBan
            Gateway.GuildBanAdded   += Gateway_GuildBanAdded;
            Gateway.GuildBanRemoved += Gateway_GuildBanRemoved;
            //Presence
            Gateway.PresenceUpdated += Gateway_PresenceUpdated;
            //RelationShip
            Gateway.RelationShipAdded   += Gateway_RelationShipAdded;
            Gateway.RelationShipRemoved += Gateway_RelationShipRemoved;
            Gateway.RelationShipUpdated += Gateway_RelationShipUpdated;
            //Typing
            Gateway.TypingStarted += Gateway_TypingStarted;
            //Note
            Gateway.UserNoteUpdated += Gateway_UserNoteUpdated;
            //UserSettings
            Gateway.UserSettingsUpdated += Gateway_UserSettingsUpdated;
            //Voice
            Gateway.VoiceServerUpdated += Gateway_VoiceServerUpdated;
            Gateway.VoiceStateUpdated  += Gateway_VoiceStateUpdated;
            //Other
            Gateway.SessionReplaced += Gateway_SessionReplaced;
            await Gateway.ConnectAsync();
        }
Example #14
0
        private async void MessageBox_Send(object sender, RoutedEventArgs e)
        {
            MessageUpsert mu = new MessageUpsert();

            mu.Content = mbox.Text;
            //   mu.Activity = new MessageActivity() { type = 3, party_id = "spotify:"+LocalModels.LocalState.CurrentUser.Id, session_id = Managers.GatewayManager.session };
            await RESTCalls.CreateMessage(App.CurrentChannelId, mu);
        }
Example #15
0
 public static async void KickMember(object sender, RoutedEventArgs e)
 {
     try
     {
         await RESTCalls.RemoveGuildMember(App.CurrentGuildId, (sender as MenuFlyoutItem).Tag.ToString());
     }
     catch { }
 }
 private async void Note_LostFocus(object sender, RoutedEventArgs e)
 {
     var userid = DisplayedMember.User.Id;
     var note   = Note.Text;
     await Task.Run(async() =>
     {
         await RESTCalls.AddNote(userid, note);
     });
 }
Example #17
0
        public static async void InviteToServer(object sender, RoutedEventArgs e)
        {
            var invite = await RESTCalls.CreateInvite(((sender as MenuFlyoutItem).Tag as Tuple <string, string>).Item1, new CreateInvite()
            {
                MaxUses = 1, Temporary = false, Unique = true
            });

            App.NavigateToDMChannel(((sender as MenuFlyoutItem).Tag as Tuple <string, string>).Item2, "https://discord.gg/" + invite.String, true, false, true);
        }
Example #18
0
        private async void Pivot_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if ((pivot.SelectedItem as PivotItem) == Invites && !LoadingInvites)
            {
                InviteView.Items.Clear();
                NoInvites.Opacity     = 0;
                LoadingInvite.Opacity = 1;
                LoadingInvites        = true;
                IEnumerable <Invite> invites = null;
                await Task.Run(async() =>
                {
                    invites = await RESTCalls.GetChannelInvites(guildId);
                });

                if (invites != null)
                {
                    foreach (var invite in invites)
                    {
                        InviteView.Items.Add(invite);
                    }
                    LoadingInvite.Fade(0, 200).Start();
                }
                if (InviteView.Items.Count == 0)
                {
                    NoInvites.Fade(0.2f, 200).Start();
                    LoadingInvite.Fade(0, 200).Start();
                }
            }
            else if ((pivot.SelectedItem as PivotItem) == Bans && !loadingBans)
            {
                BanView.Items.Clear();
                NoBans.Opacity      = 0;
                LoadingBans.Opacity = 1;
                loadingBans         = true;
                IEnumerable <Ban> bans = null;
                await Task.Run(async() =>
                {
                    bans = await RESTCalls.GetGuildBans(guildId);
                });

                if (bans != null)
                {
                    foreach (var ban in bans)
                    {
                        ban.GuildId = guildId;
                        BanView.Items.Add(ban);
                    }
                    LoadingBans.Fade(0, 200).Start();
                }
                if (BanView.Items.Count == 0)
                {
                    NoBans.Fade(0.2f, 200).Start();
                    LoadingBans.Fade(0, 200).Start();
                }
            }
        }
Example #19
0
 private async void Pin(object sender, RoutedEventArgs e)
 {
     if (((sender as MenuFlyoutItem).Tag as Message).Pinned)
     {
         await RESTCalls.UnpinMessage(((sender as MenuFlyoutItem).Tag as Message).ChannelId, ((sender as MenuFlyoutItem).Tag as Message).Id);
     }
     else
     {
         await RESTCalls.PinMessage(((sender as MenuFlyoutItem).Tag as Message).ChannelId, ((sender as MenuFlyoutItem).Tag as Message).Id);
     }
 }
        /// <summary>
        /// Trigger typing indicator
        /// </summary>
        private async void TypingStarted(object sender, TextChangedEventArgs e)
        {
            if (!typingCooldown.IsEnabled)
            {
                // Send indication
                await RESTCalls.TriggerTypingIndicator(ChannelId);

                // Track indicator
                typingCooldown.Start();
            }
        }
Example #21
0
        private async void NoteBox_LostFocus(object sender, RoutedEventArgs e)
        {
            var userid = profile.user.Id;
            var note   = NoteBox.Text.Trim();

            if (LocalState.Notes.ContainsKey(userid) && note == LocalState.Notes[userid].Trim())
            {
                return;
            }
            if (!LocalState.Notes.ContainsKey(userid) && string.IsNullOrEmpty(note))
            {
                return;
            }
            await RESTCalls.AddNote(profile.user.Id, NoteBox.Text);
        }
Example #22
0
        private async void InviteControl_OnDeleteInvite(object sender, EventArgs e)
        {
            string code = ((Invite)sender).String;

            try
            {
                await RESTCalls.DeleteInvite(code);

                InviteView.Items.Remove(InviteView.Items.FirstOrDefault(x => ((Invite)x).String == code));
            }
            catch (Exception)
            {
                MessageDialog md = new MessageDialog("Something went wrong, and we weren't able to delete the invite.",
                                                     "Sorry :/");
            }
        }
Example #23
0
 private void SaveChannelSettings(object sender, RoutedEventArgs e)
 {
     Discord_UWP.API.Channel.Models.ModifyChannel modifychannel = new Discord_UWP.API.Channel.Models.ModifyChannel()
     {
         Name                 = ChannelName.Text,
         Topic                = ChannelTopic.Text,
         Bitrate              = 64000,
         Position             = LocalState.Guilds[App.CurrentGuildId].channels[channelId].raw.Position,
         NSFW                 = NsfwSwitch.IsOn,
         PermissionOverwrites = LocalState.Guilds[App.CurrentGuildId].channels[channelId].raw.PermissionOverwrites,
         ParentId             = LocalState.Guilds[App.CurrentGuildId].channels[channelId].raw.ParentId
     };
     Task.Run(async() =>
     {
         await RESTCalls.ModifyGuildChannel(channelId, modifychannel);
     });
     CloseButton_Click(null, null);
 }
Example #24
0
        private async void MFAsms_Click(object sender, RoutedEventArgs e)
        {
            (sender as HyperlinkButton).IsEnabled = false;
            (sender as HyperlinkButton).Content   = "Sending sms...";
            var result = await RESTCalls.SendLoginSms(mfaTicket);

            (sender as HyperlinkButton).Content   = "Re-send SMS?";
            (sender as HyperlinkButton).IsEnabled = true;
            if (result.PhoneNumber == null)
            {
                MessageDialog md = new MessageDialog("Failed to send sms!");
                await md.ShowAsync();
            }
            else
            {
                MFAPassword.Header = "Code sent to " + result.PhoneNumber + ":";
                sms = true;
            }
        }
Example #25
0
        private async void SaveButton_Click(object sender, RoutedEventArgs e)
        {
            SaveButton.IsEnabled = false;
            try
            {
                Error.Visibility = Visibility.Collapsed;
                string InviteCode = Invite.Text;
                //Filter out the invite code from the link:
                InviteCode = InviteCode.Trim('/').Split('/').Last();
                await RESTCalls.AcceptInvite(InviteCode);

                CloseButton_Click(null, null);
            }
            catch
            {
                Error.Visibility     = Visibility.Visible;
                SaveButton.IsEnabled = true;
            }
        }
Example #26
0
        /// <summary>
        /// Create SimpleFriend from API Friend data
        /// </summary>
        /// <param name="f">API Friend data</param>
        /// <returns>SimpleFriend</returns>
        private async Task <SimpleFriend> NewSF(Friend f)
        {
            // Blank tample
            var friend = new SimpleFriend();

            // Set basic user details
            friend.User = f.user;
            friend.RelationshipStatus = f.Type;

            // Add Shared Guilds to List: "SharedGuilds"
            friend.SharedGuilds = new List <SimpleFriend.SharedGuild>();
            //TODO: real fix instead of work around.
            if (f.Type != 2)
            {
                UserProfile profile = await RESTCalls.GetUserProfile(friend.User.Id);

                if (profile.MutualGuilds != null)
                {
                    foreach (MutualGuild guild in profile.MutualGuilds)
                    {
                        friend.SharedGuilds.Add(new SimpleFriend.SharedGuild()
                        {
                            Id       = guild.Id,
                            ImageUrl = LocalState.Guilds[guild.Id].Raw.Icon,
                            Name     = LocalState.Guilds[guild.Id].Raw.Name
                        });
                    }
                }
            }

            // Set Presence
            if (LocalState.PresenceDict.ContainsKey(f.user.Id))
            {
                friend.UserStatus = LocalState.PresenceDict[f.user.Id].Status;
            }
            else
            {
                friend.UserStatus = "offline";
            }

            // Return value
            return(friend);
        }
Example #27
0
 private async void joinDiscordUWPServer(object sender, RoutedEventArgs e)
 {
     JoinServer.IsHitTestVisible = false;
     JoinServerText.Text         = App.GetString("/About/JoinWait");
     timer.Interval = TimeSpan.FromSeconds(2);
     timer.Tick    += TimerOnTick;
     try
     {
         await RESTCalls.AcceptInvite("wQmQgtq");
     }
     catch /*(Exception exception)*/
     {
         JoinServerText.Text = App.GetString("/About/JoinFail");
         timer.Start();
         return;
     }
     JoinServerText.Text = App.GetString("/About/JoinSucess");
     timer.Start();
 }
Example #28
0
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            var contactManager = new ContactManager();
            ContactPanelActivatedEventArgs panelArgs = (ContactPanelActivatedEventArgs)e.Parameter;
            string userID = await contactManager.ContactIdToRemoteId(panelArgs.Contact.Id);

            string DmChannelID = LocalState.DMs
                                 ?.FirstOrDefault(dm =>
                                                  dm.Value?.Type == 1 && dm.Value.Users.FirstOrDefault()?.Id == userID).Value?.Id ??
                                 (await RESTCalls.CreateDM(new CreateDM
            {
                Recipients = new List <string> {
                    userID
                }.AsEnumerable()
            })).Id;

            MessageBody.MyPeopleChannelId = DmChannelID;
        }
        /// <summary>
        /// Load newer messages
        /// </summary>
        private async void LoadNewerMessages()
        {
            try
            {
                // Check if there are newer messages
                Message last = (MessageList.Items.Last() as MessageContainer)?.Message;
                if (last != null && LocalState.RPC.ContainsKey(ChannelId) && last.Id != LocalState.RPC[ChannelId].LastMessageId)
                {
                    // Show loading indicator
                    MessagesLoading.Visibility = Visibility.Visible;

                    // Prevent a second call
                    DisableLoadingMessages = true;

                    // Get Messages
                    List <MessageContainer> messages = await MessageManager.ConvertMessage(
                        (await RESTCalls.GetChannelMessagesAfter(ChannelId,
                                                                 (MessageList.Items.LastOrDefault(x => (x as MessageContainer).Message != null) as
                                                                  MessageContainer).Message.Id)).ToList());

                    _messageStacker.ItemsUpdatingScrollMode = ItemsUpdatingScrollMode.KeepScrollOffset;

                    // Display messages
                    AddMessages(Position.After, false, messages,
                                _outofboundsNewMessage); //if there is an out of bounds new message, show the indicator. Otherwise, don't.
                    _messageStacker.ItemsUpdatingScrollMode = ItemsUpdatingScrollMode.KeepLastItemInView;


                    // Hide loading indicator
                    MessagesLoading.Visibility = Visibility.Collapsed;

                    // Buffer perioud for loading more messages
                    await Task.Delay(1000);

                    DisableLoadingMessages = false;
                }
            }
            catch
            {
                // ignored
            }
        }
Example #30
0
        private async void serverOption_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var guild = (SimpleGuild)e.AddedItems[0];
            List <SimpleChannel> channels = new List <SimpleChannel>();

            if (guild.Id == "@me")
            {
                var userchannels = await RESTCalls.GetDMs();

                foreach (var channel in userchannels)
                {
                    SimpleChannel c = new SimpleChannel();
                    c.Id = channel.Id;
                    if (!string.IsNullOrEmpty(channel.Name))
                    {
                        c.Name = channel.Name;
                    }
                    else if (channel.Users != null && channel.Users.Any())
                    {
                        c.Name = channel.Users.First().Username;
                    }
                    c.LastMessageId = "@";
                    channels.Add(c);
                }
            }
            else
            {
                var userchannels = await RESTCalls.GetGuildChannels(guild.Id);

                foreach (var channel in userchannels)
                {
                    if (channel.Type != 2 && channel.Type != 4)
                    {
                        channels.Add(ChannelManager.MakeChannel(channel, "#"));
                    }
                }
            }
            channelOption.ItemsSource = channels;
        }