Example #1
0
        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();
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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();
            }
        }
Example #4
0
        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);
        }