public async Task RefreshPledges() { if (string.IsNullOrWhiteSpace(_creds.PatreonAccessToken) || string.IsNullOrWhiteSpace(_creds.PatreonAccessToken)) { return; } LastUpdate = DateTime.UtcNow; await getPledgesLocker.WaitAsync().ConfigureAwait(false); try { var rewards = new List <PatreonPledge>(); var users = new List <PatreonUser>(); using (var http = _httpFactory.CreateClient()) { http.DefaultRequestHeaders.Clear(); http.DefaultRequestHeaders.Add("Authorization", "Bearer " + _creds.PatreonAccessToken); var data = new PatreonData() { Links = new PatreonDataLinks() { next = $"https://api.patreon.com/oauth2/api/campaigns/{_creds.PatreonCampaignId}/pledges" } }; do { var res = await http.GetStringAsync(data.Links.next) .ConfigureAwait(false); data = JsonConvert.DeserializeObject <PatreonData>(res); var pledgers = data.Data.Where(x => x["type"].ToString() == "pledge"); rewards.AddRange(pledgers.Select(x => JsonConvert.DeserializeObject <PatreonPledge>(x.ToString())) .Where(x => x.attributes.declined_since == null)); if (data.Included != null) { users.AddRange(data.Included .Where(x => x["type"].ToString() == "user") .Select(x => JsonConvert.DeserializeObject <PatreonUser>(x.ToString()))); } } while (!string.IsNullOrWhiteSpace(data.Links.next)); } var toSet = rewards.Join(users, (r) => r.relationships?.patron?.data?.id, (u) => u.id, (x, y) => new PatreonUserAndReward() { User = y, Reward = x, }).ToArray(); _pledges = toSet; } catch (Exception ex) { _log.Warn(ex); } finally { getPledgesLocker.Release(); } }
private static PatreonData <A, R> Strip <A, R>(PatreonData <A, R> data) where R : IRelationship => new PatreonData <A, R> { Id = data.Id, Type = data.Type, };
public async Task LoadPledges() { LastUpdate = DateTime.UtcNow; await getPledgesLocker.WaitAsync(1000).ConfigureAwait(false); try { var rewards = new List <PatreonPledge>(); var users = new List <PatreonUser>(); using (var http = new HttpClient()) { http.DefaultRequestHeaders.Clear(); http.DefaultRequestHeaders.Add("Authorization", "Bearer " + NadekoBot.Credentials.PatreonAccessToken); var data = new PatreonData() { Links = new PatreonDataLinks() { next = "https://api.patreon.com/oauth2/api/campaigns/334038/pledges" } }; do { var res = await http.GetStringAsync(data.Links.next) .ConfigureAwait(false); data = JsonConvert.DeserializeObject <PatreonData>(res); var pledgers = data.Data.Where(x => x["type"].ToString() == "pledge"); rewards.AddRange(pledgers.Select(x => JsonConvert.DeserializeObject <PatreonPledge>(x.ToString())) .Where(x => x.attributes.declined_since == null)); users.AddRange(data.Included .Where(x => x["type"].ToString() == "user") .Select(x => JsonConvert.DeserializeObject <PatreonUser>(x.ToString()))); } while (!string.IsNullOrWhiteSpace(data.Links.next)); } Pledges = rewards.Join(users, (r) => r.relationships?.patron?.data?.id, (u) => u.id, (x, y) => new PatreonUserAndReward() { User = y, Reward = x, }).ToImmutableArray(); } catch (Exception ex) { _log.Warn(ex); } finally { var _ = Task.Run(async() => { await Task.Delay(TimeSpan.FromMinutes(5)).ConfigureAwait(false); getPledgesLocker.Release(); }); } }
void Init() { pluginIsReady = false; AddCovalenceCommand(PatreonCommandTextMatch, nameof(PatreonCommand)); permission.RegisterPermission(claimPermission, this); permission.RegisterPermission(unlinkPermission, this); permission.RegisterPermission(linkPermission, this); permission.RegisterPermission(updatePermission, this); permission.RegisterPermission(checkPermission, this); patreonDataList = Interface.Oxide.DataFileSystem.ReadObject <PatreonData>(rustPatreonDataFile); pluginIsReady = true; Puts("Plugin is ready"); }
public async Task RefreshPledges(bool shouldLoad) { if (shouldLoad) { LastUpdate = DateTime.UtcNow; await getPledgesLocker.WaitAsync().ConfigureAwait(false); try { var rewards = new List <PatreonPledge>(); var users = new List <PatreonUser>(); using (var http = new HttpClient()) { http.DefaultRequestHeaders.Clear(); http.DefaultRequestHeaders.Add("Authorization", "Bearer " + _creds.PatreonAccessToken); var data = new PatreonData() { Links = new PatreonDataLinks() { next = $"https://api.patreon.com/oauth2/api/campaigns/{_creds.PatreonCampaignId}/pledges" } }; do { var res = await http.GetStringAsync(data.Links.next) .ConfigureAwait(false); data = JsonConvert.DeserializeObject <PatreonData>(res); var pledgers = data.Data.Where(x => x["type"].ToString() == "pledge"); rewards.AddRange(pledgers.Select(x => JsonConvert.DeserializeObject <PatreonPledge>(x.ToString())) .Where(x => x.attributes.declined_since == null)); users.AddRange(data.Included .Where(x => x["type"].ToString() == "user") .Select(x => JsonConvert.DeserializeObject <PatreonUser>(x.ToString()))); } while (!string.IsNullOrWhiteSpace(data.Links.next)); } Pledges = rewards.Join(users, (r) => r.relationships?.patron?.data?.id, (u) => u.id, (x, y) => new PatreonUserAndReward() { User = y, Reward = x, }).ToImmutableArray(); File.WriteAllText("./patreon_rewards.json", JsonConvert.SerializeObject(Pledges)); } catch (Exception ex) { _log.Warn(ex); } finally { getPledgesLocker.Release(); } } else { if (File.Exists(cacheFileName)) { Pledges = JsonConvert.DeserializeObject <PatreonUserAndReward[]>(File.ReadAllText("./patreon_rewards.json")) .ToImmutableArray(); } } }