Added a big part of basic patreon stuff, but can't activate it yet, waiting for their email reply to check some things
This commit is contained in:
parent
2f69535565
commit
ec24ac3886
@ -1,78 +1,110 @@
|
|||||||
using System.Collections.Generic;
|
//using System.Collections.Generic;
|
||||||
using System.Linq;
|
//using System.Linq;
|
||||||
using System.Net.Http;
|
//using System.Net.Http;
|
||||||
using System.Threading.Tasks;
|
//using System.Threading.Tasks;
|
||||||
using Discord.Commands;
|
//using Discord.Commands;
|
||||||
using Discord;
|
//using NadekoBot.Attributes;
|
||||||
using NadekoBot.Attributes;
|
//using NadekoBot.Modules.Utility.Models;
|
||||||
using NadekoBot.Modules.Utility.Models;
|
//using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json;
|
//using System.Threading;
|
||||||
|
//using System;
|
||||||
|
//using System.Collections.Immutable;
|
||||||
|
|
||||||
namespace NadekoBot.Modules.Utility
|
//namespace NadekoBot.Modules.Utility
|
||||||
{
|
//{
|
||||||
public partial class Utility
|
// public partial class Utility
|
||||||
{
|
// {
|
||||||
// [Group]
|
// [Group]
|
||||||
// public class PatreonCommands : NadekoSubmodule
|
// public class PatreonCommands : NadekoSubmodule
|
||||||
// {
|
// {
|
||||||
// [NadekoCommand, Usage, Description, Aliases]
|
// [NadekoCommand, Usage, Description, Aliases]
|
||||||
// [RequireContext(ContextType.Guild)]
|
// public async Task ClaimPatreonRewards()
|
||||||
// public async Task ClaimPatreonRewards([Remainder] string arg)
|
|
||||||
// {
|
// {
|
||||||
// var pledges = await GetPledges2();
|
// var patreon = PatreonThingy.Instance;
|
||||||
|
|
||||||
|
// var pledges = (await patreon.GetPledges().ConfigureAwait(false))
|
||||||
|
// .OrderByDescending(x => x.Reward.attributes.amount_cents);
|
||||||
|
|
||||||
|
// if (pledges == null)
|
||||||
|
// {
|
||||||
|
// await ReplyErrorLocalized("pledges_loading").ConfigureAwait(false);
|
||||||
|
// return;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// private static async Task<Pledge[]> GetPledges()
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// public class PatreonThingy
|
||||||
// {
|
// {
|
||||||
// var pledges = new List<Pledge>();
|
// public static PatreonThingy _instance = new PatreonThingy();
|
||||||
|
// public static PatreonThingy Instance => _instance;
|
||||||
|
|
||||||
|
// private readonly SemaphoreSlim getPledgesLocker = new SemaphoreSlim(1, 1);
|
||||||
|
|
||||||
|
// private ImmutableArray<PatreonUserAndReward> pledges;
|
||||||
|
|
||||||
|
// static PatreonThingy() { }
|
||||||
|
|
||||||
|
// public async Task<ImmutableArray<PatreonUserAndReward>> GetPledges()
|
||||||
|
// {
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// await LoadPledges().ConfigureAwait(false);
|
||||||
|
// return pledges;
|
||||||
|
// }
|
||||||
|
// catch (OperationCanceledException)
|
||||||
|
// {
|
||||||
|
// return pledges;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// public async Task LoadPledges()
|
||||||
|
// {
|
||||||
|
// await getPledgesLocker.WaitAsync(1000).ConfigureAwait(false);
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// var rewards = new List<PatreonPledge>();
|
||||||
|
// var users = new List<PatreonUser>();
|
||||||
// using (var http = new HttpClient())
|
// using (var http = new HttpClient())
|
||||||
// {
|
// {
|
||||||
// http.DefaultRequestHeaders.Clear();
|
// http.DefaultRequestHeaders.Clear();
|
||||||
// http.DefaultRequestHeaders.Add("Authorization", "Bearer " + NadekoBot.Credentials.PatreonAccessToken);
|
// http.DefaultRequestHeaders.Add("Authorization", "Bearer " + NadekoBot.Credentials.PatreonAccessToken);
|
||||||
// var data = new PatreonData()
|
// var data = new PatreonData()
|
||||||
// {
|
// {
|
||||||
// Links = new Links()
|
// Links = new PatreonDataLinks()
|
||||||
// {
|
// {
|
||||||
// Next = "https://api.patreon.com/oauth2/api/campaigns/334038/pledges"
|
// next = "https://api.patreon.com/oauth2/api/campaigns/334038/pledges"
|
||||||
// }
|
// }
|
||||||
// };
|
// };
|
||||||
// do
|
// do
|
||||||
// {
|
// {
|
||||||
// var res =
|
// var res = await http.GetStringAsync(data.Links.next)
|
||||||
// await http.GetStringAsync(data.Links.Next)
|
|
||||||
// .ConfigureAwait(false);
|
// .ConfigureAwait(false);
|
||||||
// data = JsonConvert.DeserializeObject<PatreonData>(res);
|
// data = JsonConvert.DeserializeObject<PatreonData>(res);
|
||||||
// pledges.AddRange(data.Data);
|
// var pledgers = data.Data.Where(x => x["type"].ToString() == "pledge");
|
||||||
// } while (!string.IsNullOrWhiteSpace(data.Links.Next));
|
// 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));
|
||||||
// }
|
// }
|
||||||
// return pledges.Where(x => string.IsNullOrWhiteSpace(x.Attributes.declined_since)).ToArray();
|
// pledges = rewards.Join(users, (r) => r.relationships?.patron?.data?.id, (u) => u.id, (x, y) => new PatreonUserAndReward()
|
||||||
|
// {
|
||||||
|
// User = y,
|
||||||
|
// Reward = x,
|
||||||
|
// }).ToImmutableArray();
|
||||||
// }
|
// }
|
||||||
|
// finally
|
||||||
|
// {
|
||||||
|
// var _ = Task.Run(async () =>
|
||||||
|
// {
|
||||||
|
// await Task.Delay(TimeSpan.FromMinutes(5)).ConfigureAwait(false);
|
||||||
|
// getPledgesLocker.Release();
|
||||||
|
// });
|
||||||
|
|
||||||
// private static async Task<Pledge[]> GetPledges2()
|
|
||||||
// {
|
|
||||||
// var pledges = new List<Pledge>();
|
|
||||||
// using (var http = new HttpClient())
|
|
||||||
// {
|
|
||||||
// http.DefaultRequestHeaders.Clear();
|
|
||||||
// http.DefaultRequestHeaders.Add("Authorization", "Bearer " + NadekoBot.Credentials.PatreonAccessToken);
|
|
||||||
// var data = new PatreonData()
|
|
||||||
// {
|
|
||||||
// Links = new Links()
|
|
||||||
// {
|
|
||||||
// Next = "https://api.patreon.com/oauth2/api/current_user/campaigns?include=pledges"
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
// do
|
|
||||||
// {
|
|
||||||
// var res =
|
|
||||||
// await http.GetStringAsync(data.Links.Next)
|
|
||||||
// .ConfigureAwait(false);
|
|
||||||
// data = JsonConvert.DeserializeObject<PatreonData>(res);
|
|
||||||
// pledges.AddRange(data.Data);
|
|
||||||
// } while (!string.IsNullOrWhiteSpace(data.Links.Next));
|
|
||||||
// }
|
|
||||||
// return pledges.Where(x => string.IsNullOrWhiteSpace(x.Attributes.declined_since)).ToArray();
|
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System;
|
using Newtonsoft.Json.Linq;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@ -6,32 +7,22 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace NadekoBot.Modules.Utility.Models
|
namespace NadekoBot.Modules.Utility.Models
|
||||||
{
|
{
|
||||||
|
|
||||||
public class PatreonData
|
public class PatreonData
|
||||||
{
|
{
|
||||||
public Pledge[] Data { get; set; }
|
public JObject[] Included { get; set; }
|
||||||
public Links Links { get; set; }
|
public JObject[] Data { get; set; }
|
||||||
|
public PatreonDataLinks Links { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Attributes
|
public class PatreonDataLinks
|
||||||
{
|
{
|
||||||
public int amount_cents { get; set; }
|
public string first { get; set; }
|
||||||
public string created_at { get; set; }
|
public string next { get; set; }
|
||||||
public string declined_since { get; set; }
|
|
||||||
public bool is_twitch_pledge { get; set; }
|
|
||||||
public bool patron_pays_fees { get; set; }
|
|
||||||
public int pledge_cap_cents { get; set; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Pledge
|
public class PatreonUserAndReward
|
||||||
{
|
{
|
||||||
public Attributes Attributes { get; set; }
|
public PatreonUser User { get; set; }
|
||||||
public int Id { get; set; }
|
public PatreonPledge Reward { get; set; }
|
||||||
}
|
|
||||||
|
|
||||||
public class Links
|
|
||||||
{
|
|
||||||
public string First { get; set; }
|
|
||||||
public string Next { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
68
src/NadekoBot/Modules/Utility/Models/PatreonPledge.cs
Normal file
68
src/NadekoBot/Modules/Utility/Models/PatreonPledge.cs
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace NadekoBot.Modules.Utility.Models
|
||||||
|
{
|
||||||
|
public class Attributes
|
||||||
|
{
|
||||||
|
public int amount_cents { get; set; }
|
||||||
|
public string created_at { get; set; }
|
||||||
|
public object declined_since { get; set; }
|
||||||
|
public bool is_twitch_pledge { get; set; }
|
||||||
|
public bool patron_pays_fees { get; set; }
|
||||||
|
public int pledge_cap_cents { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Address
|
||||||
|
{
|
||||||
|
public object data { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Data
|
||||||
|
{
|
||||||
|
public string id { get; set; }
|
||||||
|
public string type { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Links
|
||||||
|
{
|
||||||
|
public string related { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Creator
|
||||||
|
{
|
||||||
|
public Data data { get; set; }
|
||||||
|
public Links links { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Patron
|
||||||
|
{
|
||||||
|
public Data data { get; set; }
|
||||||
|
public Links links { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Reward
|
||||||
|
{
|
||||||
|
public Data data { get; set; }
|
||||||
|
public Links links { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Relationships
|
||||||
|
{
|
||||||
|
public Address address { get; set; }
|
||||||
|
public Creator creator { get; set; }
|
||||||
|
public Patron patron { get; set; }
|
||||||
|
public Reward reward { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class PatreonPledge
|
||||||
|
{
|
||||||
|
public Attributes attributes { get; set; }
|
||||||
|
public string id { get; set; }
|
||||||
|
public Relationships relationships { get; set; }
|
||||||
|
public string type { get; set; }
|
||||||
|
}
|
||||||
|
}
|
70
src/NadekoBot/Modules/Utility/Models/PatreonUser.cs
Normal file
70
src/NadekoBot/Modules/Utility/Models/PatreonUser.cs
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace NadekoBot.Modules.Utility.Models
|
||||||
|
{
|
||||||
|
public class DiscordConnection
|
||||||
|
{
|
||||||
|
public string user_id { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SocialConnections
|
||||||
|
{
|
||||||
|
public object deviantart { get; set; }
|
||||||
|
public DiscordConnection discord { get; set; }
|
||||||
|
public object facebook { get; set; }
|
||||||
|
public object spotify { get; set; }
|
||||||
|
public object twitch { get; set; }
|
||||||
|
public object twitter { get; set; }
|
||||||
|
public object youtube { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class UserAttributes
|
||||||
|
{
|
||||||
|
public string about { get; set; }
|
||||||
|
public string created { get; set; }
|
||||||
|
public object discord_id { get; set; }
|
||||||
|
public string email { get; set; }
|
||||||
|
public object facebook { get; set; }
|
||||||
|
public object facebook_id { get; set; }
|
||||||
|
public string first_name { get; set; }
|
||||||
|
public string full_name { get; set; }
|
||||||
|
public int gender { get; set; }
|
||||||
|
public bool has_password { get; set; }
|
||||||
|
public string image_url { get; set; }
|
||||||
|
public bool is_deleted { get; set; }
|
||||||
|
public bool is_nuked { get; set; }
|
||||||
|
public bool is_suspended { get; set; }
|
||||||
|
public string last_name { get; set; }
|
||||||
|
public SocialConnections social_connections { get; set; }
|
||||||
|
public int status { get; set; }
|
||||||
|
public string thumb_url { get; set; }
|
||||||
|
public object twitch { get; set; }
|
||||||
|
public string twitter { get; set; }
|
||||||
|
public string url { get; set; }
|
||||||
|
public string vanity { get; set; }
|
||||||
|
public object youtube { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class Campaign
|
||||||
|
{
|
||||||
|
public Data data { get; set; }
|
||||||
|
public Links links { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class UserRelationships
|
||||||
|
{
|
||||||
|
public Campaign campaign { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class PatreonUser
|
||||||
|
{
|
||||||
|
public UserAttributes attributes { get; set; }
|
||||||
|
public string id { get; set; }
|
||||||
|
public UserRelationships relationships { get; set; }
|
||||||
|
public string type { get; set; }
|
||||||
|
}
|
||||||
|
}
|
15
src/NadekoBot/Services/Database/Models/PatreonRewards.cs
Normal file
15
src/NadekoBot/Services/Database/Models/PatreonRewards.cs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace NadekoBot.Services.Database.Models
|
||||||
|
{
|
||||||
|
public class PatreonRewards : DbEntity
|
||||||
|
{
|
||||||
|
public ulong UserId { get; set; }
|
||||||
|
public ulong PledgeCents { get; set; }
|
||||||
|
public ulong Awarded { get; set; }
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user