/// <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; }
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(); } } }
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)); }
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; }
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); }); }
private async void SendFriendRequest(object sender, RoutedEventArgs e) { await Task.Run(async() => { await RESTCalls.SendFriendRequest(profile.user.Id); }); }
/// <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"); } }
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); }
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(); }
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); }
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); }); }
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); }
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(); } } }
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(); } }
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); }
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 :/"); } }
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); }
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; } }
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; } }
/// <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); }
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(); }
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 } }
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; }