public override async void KeyPressed(KeyPayload payload) { Logger.Instance.LogMessage(TracingLevel.INFO, $"{this.GetType()} KeyPressed"); var viewers = await TwitchChannelInfoManager.Instance.GetChannelViewers(Settings.ChannelName); // We have a list of usernames, get some more details on them so we can display their image on the StreamDeck List <ChatMessageKey> chatMessages = new List <ChatMessageKey>(); foreach (string username in viewers.AllViewers) { TwitchUserInfo userInfo = null; if (!Settings.DontLoadImages) { userInfo = await TwitchUserInfoManager.Instance.GetUserInfo(username); } chatMessages.Add(new ChatMessageKey(userInfo?.Name ?? username, userInfo?.ProfileImageUrl, null)); } Logger.Instance.LogMessage(TracingLevel.INFO, $"{this.GetType()} KeyPress returned {chatMessages?.Count} viewers"); // Show the active chatters on the StreamDeck if (chatMessages != null && chatMessages.Count > 0) { AlertManager.Instance.Initialize(Connection); AlertManager.Instance.ShowChatMessages(chatMessages.OrderBy(c => c.KeyTitle.ToLowerInvariant()).ToArray(), null); } else { await Connection.ShowOk(); } }
public static async Task <List <TwitchData> > GetTwitchInfo(string username) { HttpClient HTTPClient = new HttpClient(); HTTPClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {Global.TwitchOauthKey}"); HTTPClient.DefaultRequestHeaders.Add("Client-Id", $"{Global.TwitchClientId}"); HttpResponseMessage HTTPResponse = await HTTPClient.GetAsync($"https://api.twitch.tv/helix/users?login={username}"); string resp = await HTTPResponse.Content.ReadAsStringAsync(); TwitchUserInfo myDeserializedClass = JsonConvert.DeserializeObject <TwitchUserInfo>(resp); return(myDeserializedClass.data); }
public override async void KeyPressed(KeyPayload payload) { Logger.Instance.LogMessage(TracingLevel.INFO, $"{this.GetType()} KeyPressed"); if (!TwitchTokenManager.Instance.TokenExists) { Logger.Instance.LogMessage(TracingLevel.ERROR, $"{this.GetType()} called without a valid token"); await Connection.ShowAlert(); return; } string[] userNames; if (Settings.UsersDisplay == UsersDisplay.ActiveChatters) { var chatters = TwitchChat.Instance.GetLastChatters(); if (chatters == null) { Logger.Instance.LogMessage(TracingLevel.ERROR, "GetLastChatters returned null"); await Connection.ShowAlert(); return; } Logger.Instance.LogMessage(TracingLevel.INFO, "Shoutout loading active chatters"); userNames = chatters.ToArray(); } else // Show all viewers { string channel = Settings.Channel; if (String.IsNullOrEmpty(channel)) { channel = TwitchTokenManager.Instance.User.UserName; } var viewers = await TwitchChannelInfoManager.Instance.GetChannelViewers(channel); if (viewers == null) { Logger.Instance.LogMessage(TracingLevel.ERROR, "GetChannelViewers returned null"); await Connection.ShowAlert(); return; } Logger.Instance.LogMessage(TracingLevel.INFO, "Shoutout loading all viewers"); userNames = viewers.AllViewers.OrderBy(u => u.ToLowerInvariant()).ToArray(); } // We have a list of usernames, get some more details on them so we can display their image on the StreamDeck List <ChatMessageKey> chatMessages = new List <ChatMessageKey>(); foreach (string username in userNames) { TwitchUserInfo userInfo = null; if (!Settings.DontLoadImages) { userInfo = await TwitchUserInfoManager.Instance.GetUserInfo(username); } chatMessages.Add(new ChatMessageKey(userInfo?.Name ?? username, userInfo?.ProfileImageUrl, Settings.ChatMessage.Replace("{USERNAME}", $"{userInfo?.Name ?? username}"))); } Logger.Instance.LogMessage(TracingLevel.INFO, $"{this.GetType()} KeyPress returned {chatMessages?.Count} chat messages"); // Show the active chatters on the StreamDeck if (chatMessages != null && chatMessages.Count > 0) { AlertManager.Instance.Initialize(Connection); AlertManager.Instance.ShowChatMessages(chatMessages.ToArray(), Settings.Channel); } else { await Connection.ShowOk(); } }
private async Task <FetchReturnValue> Fetch() { IUserInfo userInfo; if (selectedUserInfo == null) { string userIdentifier = textboxUsername.Text.Trim(); switch (comboBoxService.Text) { case "Twitch (Recordings)": userInfo = new TwitchUserInfo(userIdentifier, false); break; case "Twitch (Highlights)": userInfo = new TwitchUserInfo(userIdentifier, true); break; case "Hitbox": userInfo = new HitboxUserInfo(userIdentifier); break; case "Youtube (Playlist)": userInfo = new YoutubePlaylistUserInfo(userIdentifier); break; case "Youtube (User)": userInfo = new YoutubeUserUserInfo(userIdentifier); break; case "Youtube (Channel)": userInfo = new YoutubeChannelUserInfo(userIdentifier); break; case "RSS Feed": userInfo = new RssFeedUserInfo(userIdentifier); break; case "FFMpeg Reencode": userInfo = new FFMpegJobUserInfo(userIdentifier); break; case "Archive.org URL": userInfo = new ArchiveOrgUserInfo(userIdentifier); break; default: return(new FetchReturnValue { Success = false, HasMore = false }); } userInfo.Persistable = checkBoxSaveForLater.Checked; } else { userInfo = selectedUserInfo; } var rv = await Fetch(userInfo, Offset, checkBoxFlat.Checked); if (rv.Success && rv.Videos.Count > 0) { Offset += rv.VideoCountThisFetch; textboxUsername.Enabled = false; comboBoxService.Enabled = false; comboBoxKnownUsers.Enabled = false; if (rv.HasMore && rv.TotalVideos != -1) { buttonFetch.Text = "Fetch More (" + (rv.TotalVideos - Offset) + " left)"; } else { buttonFetch.Text = "Fetch More"; } buttonFetch.Enabled = rv.HasMore; buttonClear.Enabled = true; objectListViewVideos.BeginUpdate(); foreach (var v in rv.Videos) { objectListViewVideos.AddObject(v); } objectListViewVideos.EndUpdate(); } return(rv); }