So in asp.net I managed to get this far. But now I need to be able to get a patron’s discord.
The code is as follows:
(The code embeds a slightly modified patreon.net added to the project code to have it also use netcoreapp3.1
)
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System.Text.Encodings;
using WebApi1.Discord;
using WebApi1.Patreon.Requests;
using WebApi1.Patreon.API;
namespace WebApi1.Patreon.Controllers
{
[ApiController]
public class PatreonPledgesController : ControllerBase
{
private readonly ILogger<PatreonPledgesController> _logger;
public PatreonPledgesController(ILogger<PatreonPledgesController> logger)
=> this._logger = logger;
[HttpPost("pledges")]
public async Task<IActionResult> GetPatreonPledges(/*[FromBody] PatreonRequestData request*/)
{
if (!string.IsNullOrEmpty(this.Request.Headers["X-Patreon-Event"]))
{
string trigger = this.Request.Headers["X-Patreon-Event"];
// do stuff for each trigger.
return this.ProcessTriggers(trigger/*, request*/);
}
else
{
return this.BadRequest();
}
}
private IActionResult ProcessTriggers(string trigger/*, PatreonRequestData request*/)
{
_ = Task.Run(() => { _ = this.FilterDiscordInfo(trigger/*, request*/); });
return this.Ok();
}
private async Task FilterDiscordInfo(string trigger/*, PatreonRequestData request*/)
{
var myUniqueFileName = "PatreonToken.json";
var jsonString = System.IO.File.ReadAllText(myUniqueFileName);
var patreonToken = PatreonToken.FromJson(jsonString);
var patreon = new PatreonClient(patreonToken.AccessToken);
await patreon.RefreshToken(patreonToken);
var pledges = patreon?.GetCampaignPledges(patreonToken.CampaignId)?.Result;
// for each user filter the values to see if their payment went through or not (aka are valid patrons).
foreach (var pledge in pledges)
{
var creatorUser = patreon.GetUser(patreonToken.CreatorUserId)?.Result;
var patronUser = patreon.GetUser(pledge.Relationships.Patron.Id)?.Result; // always null on id for some reason atm.
var creatorDiscordServerId = creatorUser.Attributes.DiscordServerId; // always null for some reason atm.
var valid_patron = pledge.Attributes.DeclinedSince == null;
var userDiscordId = patronUser .Attributes?.DiscordId; // always null for some reason atm.
var patronFullName = patronUser .Attributes?.FullName; // always null for some reason atm.
#region current triggers.
if (!string.IsNullOrEmpty(userDiscordId))
{
if (trigger.Equals(PledgeTypeHelper.GetStringType(PledgeType.MemberCreate)))
{
if (!valid_patron)
{
this._logger.LogInformation($"Found invalid patron. {patronFullName}", Array.Empty<object>());
await DiscordRoleHelper.RemoveRole(creatorDiscordServerId, userDiscordId, "Patron");
}
else
{
await DiscordRoleHelper.AddRole(creatorDiscordServerId, userDiscordId, "Patron");
}
}
else if (trigger.Equals(PledgeTypeHelper.GetStringType(PledgeType.MemberUpdate)))
{
// filter between old and new tiers and optionally edit the roles on discord.
}
else if (trigger.Equals(PledgeTypeHelper.GetStringType(PledgeType.MemberDelete)))
{
await DiscordRoleHelper.RemoveRole(creatorDiscordServerId, userDiscordId, "Patron");
}
else if (trigger.Equals(PledgeTypeHelper.GetStringType(PledgeType.MemberPledgeCreate)))
{
if (!valid_patron)
{
this._logger.LogInformation($"Found invalid patron. {patronFullName}", Array.Empty<object>());
await DiscordRoleHelper.RemoveRole(creatorDiscordServerId, userDiscordId, "Patron");
}
else
{
await DiscordRoleHelper.AddRole(creatorDiscordServerId, userDiscordId, "Patron");
}
}
else if (trigger.Equals(PledgeTypeHelper.GetStringType(PledgeType.MemberPledgeUpdate)))
{
// filter between old and new tiers and optionally edit the roles on discord.
}
else if (trigger.Equals(PledgeTypeHelper.GetStringType(PledgeType.MemberPledgeDelete)))
{
await DiscordRoleHelper.RemoveRole(creatorDiscordServerId, userDiscordId, "Patron");
}
}
#endregion current triggers.
}
}
}
}
However my issue is somehow 3 things from it returns always null.
Maybe I am missing a request scope?
Edit: It seems anything under the Attributes
property when getting pledges is always null and pledges only gives the pledge id.