public async Task Subscribe([QueueTrigger("twitch-channel-subscription", Connection = "TwitchChatStorage")] CloudQueueMessage msg, ILogger logger) { // subscribe to csharpfritz var twitchEndPoint = "https://api.twitch.tv/helix/webhooks/hub"; // could end up like configuration["Twitch:HubEndpoint"] var leaseInSeconds = 0; // 86400 = 24 hours. var channelId = await GetChannelIdForUserName(msg.AsString); var callbackUrl = new Uri(_Configuration["EndpointBaseUrl"]); var payload = new TwitchWebhookSubscriptionPayload { callback = new Uri(callbackUrl, $"?channelId={channelId}").ToString(), mode = "subscribe", topic = $"https://api.twitch.tv/helix/streams?user_id={channelId}", lease_seconds = leaseInSeconds, secret = TWITCH_SECRET }; var stringPayload = JsonConvert.SerializeObject(payload); logger.Log(LogLevel.Information, $"Subscribing to Twitch with payload: {stringPayload}"); using (var client = _HttpClientFactory.CreateClient()) { var responseMessage = await client.PostAsync(@"https://api.twitch.tv/helix/webhooks/hub", new StringContent(stringPayload, Encoding.UTF8, @"application/json")); if (!responseMessage.IsSuccessStatusCode) { var responseBody = await responseMessage.Content.ReadAsStringAsync(); logger.Log(LogLevel.Error, $"Error response body: {responseBody}"); } } }
public async Task Subscribe([QueueTrigger("twitch-channel-subscription", Connection = "TwitchChatStorage")] string msg, ILogger logger) { var twitchEndPoint = "https://api.twitch.tv/helix/webhooks/hub"; // could end up like configuration["Twitch:HubEndpoint"] //#if DEBUG var leaseInSeconds = 864000; // = 10 days //#endif var channelId = long.TryParse(msg, out var _) ? msg : await GetChannelIdForUserName(msg); var callbackUrl = new Uri(Configuration["EndpointBaseUrl"]); var payload = new TwitchWebhookSubscriptionPayload { callback = new Uri(callbackUrl, $"?channelId={channelId}").ToString(), mode = "subscribe", topic = $"https://api.twitch.tv/helix/streams?user_id={channelId}", lease_seconds = leaseInSeconds, secret = TWITCH_SECRET }; logger.LogDebug($"Posting with callback url: {payload.callback}"); var stringPayload = JsonConvert.SerializeObject(payload); logger.Log(LogLevel.Information, $"Subscribing to Twitch with payload: {stringPayload}"); using (var client = GetHttpClient(twitchEndPoint)) { var token = await GetAccessToken(); client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token.AccessToken}"); var responseMessage = await client.PostAsync("", new StringContent(stringPayload, Encoding.UTF8, @"application/json")); if (!responseMessage.IsSuccessStatusCode) { var responseBody = await responseMessage.Content.ReadAsStringAsync(); logger.Log(LogLevel.Error, $"Error response body: {responseBody}"); } else { var sub = new CurrentSubscription { ChannelId = channelId, ChannelName = msg, ExpirationDateTimeUtc = DateTime.UtcNow.AddSeconds(leaseInSeconds).AddDays(-1) }; var repo = new CurrentSubscriptionsRepository(Configuration); await repo.AddSubscription(sub); } } }
public async Task <IActionResult> Unsubscribe( [HttpTrigger(AuthorizationLevel.Anonymous, methods: new string[] { "get" })] HttpRequest req, ILogger logger) { var twitchEndPoint = "https://api.twitch.tv/helix/webhooks/hub"; // could end up like configuration["Twitch:HubEndpoint"] //#if DEBUG var leaseInSeconds = 864000; // = 10 days //#endif var msg = req.Query["channel"].ToString(); var channelId = long.TryParse(msg, out var _) ? msg : await GetChannelIdForUserName(msg); var callbackUrl = new Uri(Configuration["EndpointBaseUrl"]); var payload = new TwitchWebhookSubscriptionPayload { callback = new Uri(callbackUrl, $"?channelId={channelId}").ToString(), mode = "unsubscribe", topic = $"https://api.twitch.tv/helix/streams?user_id={channelId}", lease_seconds = leaseInSeconds, secret = TWITCH_SECRET }; logger.LogDebug($"Posting with callback url: {payload.callback}"); var stringPayload = JsonConvert.SerializeObject(payload); logger.Log(LogLevel.Information, $"Subscribing to Twitch with payload: {stringPayload}"); using (var client = GetHttpClient(twitchEndPoint)) { var token = await GetAccessToken(); client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token.AccessToken}"); var responseMessage = await client.PostAsync("", new StringContent(stringPayload, Encoding.UTF8, @"application/json")); if (!responseMessage.IsSuccessStatusCode) { var responseBody = await responseMessage.Content.ReadAsStringAsync(); logger.Log(LogLevel.Error, $"Error response body: {responseBody}"); return(new BadRequestErrorMessageResult(responseBody)); } return(new OkResult()); } }