public async Task <HttpStatusCode> SetWebHook(WebHooksModel model, string oauthToken) { var url = "https://api.twitch.tv/helix/webhooks/hub"; var json = JsonConvert.SerializeObject(model); var data = new StringContent(json, Encoding.UTF8, "application/json"); HttpResponseMessage response = await _client.SendAsync(new HttpRequestMessage() { RequestUri = new Uri(url), Method = HttpMethod.Post, Headers = { { "Authorization", $"Bearer {oauthToken}" } }, Content = data }); string shit = await response.Content.ReadAsStringAsync(); return(response.StatusCode); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddSignalR(); services.AddControllersWithViews().AddNewtonsoftJson(); //add user access state store services.AddSingleton <UserAccessStateStore, UserAccessStateStore>(serviceProvider => { return(new UserAccessStateStore()); }); //add user access token store services.AddSingleton <UserAccessTokenStore, UserAccessTokenStore>(serviceProvider => { return(new UserAccessTokenStore()); }); //add twitch api client services.AddSingleton <ITwitchApiClient, TwitchApiClient>(serviceProvider => { IConfiguration configuration = serviceProvider.GetService <IConfiguration>(); IConfigurationSection appSettings = configuration.GetSection("AppSettings"); string clientId = appSettings["api-client-id"]; string clientSecret = appSettings["api-client-secret"]; return(new TwitchApiClient(clientId, clientSecret)); }); //add scheduled webhook subscription task for follows services.AddSingleton <IScheduledTask, WebHookSubscriptionTask>(serviceProvider => { ITwitchApiClient twitchApiClient = serviceProvider.GetService <ITwitchApiClient>(); UserAccessTokenStore userAccessTokenStore = serviceProvider.GetService <UserAccessTokenStore>(); var model = new WebHooksModel() { Callback = "http://test-env.eba-aafhtxzp.us-west-2.elasticbeanstalk.com/api/twitchwebhook/follows", Mode = "subscribe", Topic = "https://api.twitch.tv/helix/users/follows?first=1&to_id=58669321", LeaseSeconds = 864000 //max lease time }; return(new WebHookSubscriptionTask(twitchApiClient, model, userAccessTokenStore)); }); //add scheduled webhook subscription task for subs services.AddSingleton <IScheduledTask, WebHookSubscriptionTask>(serviceProvider => { ITwitchApiClient twitchApiClient = serviceProvider.GetService <ITwitchApiClient>(); UserAccessTokenStore userAccessTokenStore = serviceProvider.GetService <UserAccessTokenStore>(); var model = new WebHooksModel() { Callback = "http://test-env.eba-aafhtxzp.us-west-2.elasticbeanstalk.com/api/twitchwebhook/subs", Mode = "subscribe", Topic = "https://api.twitch.tv/helix/subscriptions/events?broadcaster_id=58669321&first=1", LeaseSeconds = 864000 //max lease time }; return(new WebHookSubscriptionTask(twitchApiClient, model, userAccessTokenStore)); }); //add scheduled followers update task services.AddSingleton <IScheduledTask, UpdateFollowersTask>(serviceProvider => { IHubContext <FollowersHub> hubContext = serviceProvider.GetService <IHubContext <FollowersHub> >(); ITwitchApiClient twitchApiClient = serviceProvider.GetService <ITwitchApiClient>(); UserAccessTokenStore userAccessTokenStore = serviceProvider.GetService <UserAccessTokenStore>(); IConfiguration configuration = serviceProvider.GetService <IConfiguration>(); IConfigurationSection appSettings = configuration.GetSection("AppSettings"); return(new UpdateFollowersTask(hubContext, twitchApiClient, userAccessTokenStore, int.Parse(appSettings["stream-id"]))); }); //add scheduled subs update task services.AddSingleton <IScheduledTask, UpdateSubsTask>(serviceProvider => { ITwitchApiClient twitchApiClient = serviceProvider.GetService <ITwitchApiClient>(); IHubContext <SubsHub> hubContext = serviceProvider.GetService <IHubContext <SubsHub> >(); UserAccessTokenStore userAccessTokenStore = serviceProvider.GetService <UserAccessTokenStore>(); IConfiguration configuration = serviceProvider.GetService <IConfiguration>(); IConfigurationSection appSettings = configuration.GetSection("AppSettings"); return(new UpdateSubsTask(hubContext, twitchApiClient, userAccessTokenStore, int.Parse(appSettings["stream-id"]))); }); //add scheduled task - refresh user access token services.AddSingleton <IScheduledTask, RefreshUserAccessTokenTask>(serviceProvider => { ITwitchApiClient twitchApiClient = serviceProvider.GetService <ITwitchApiClient>(); UserAccessTokenStore userAccessTokenStore = serviceProvider.GetService <UserAccessTokenStore>(); return(new RefreshUserAccessTokenTask(twitchApiClient, userAccessTokenStore)); }); //add scheduler services.AddSingleton <IHostedService, SchedulerService>(serviceProvider => { var instance = new SchedulerService(serviceProvider.GetServices <IScheduledTask>()); instance.UnobservedTaskException += (sender, args) => { Console.WriteLine(args.Exception.Message); args.SetObserved(); }; return(instance); }); }
public WebHookSubscriptionTask(ITwitchApiClient twitchApiClient, WebHooksModel model, UserAccessTokenStore userAccessTokenStore) { _twitchApiClient = twitchApiClient; _model = model; _userAccessTokenStore = userAccessTokenStore; }