69 lines
No EOL
2.2 KiB
C#
69 lines
No EOL
2.2 KiB
C#
using System.Threading.Tasks;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Extensions.Logging;
|
|
using EllieBot.GrpcVotesApi;
|
|
|
|
namespace EllieBot.VotesApi.Controllers
|
|
{
|
|
[ApiController]
|
|
public class WebhookController(ILogger<WebhookController> logger, VoteService.VoteServiceClient client)
|
|
: ControllerBase
|
|
{
|
|
[HttpPost("/discordswebhook")]
|
|
[Authorize(Policy = Policies.DiscordsAuth)]
|
|
public async Task<IActionResult> DiscordsWebhook([FromBody] DiscordsVoteWebhookModel data)
|
|
{
|
|
if ((data.Type?.Contains("vote") ?? false) == false)
|
|
return Ok();
|
|
|
|
logger.LogInformation("User {UserId} has voted for Bot {BotId} on {Platform}",
|
|
data.User,
|
|
data.Bot,
|
|
"discords.com");
|
|
|
|
await client.VoteReceivedAsync(new GrpcVoteData()
|
|
{
|
|
Type = VoteType.Discords,
|
|
UserId = data.User,
|
|
});
|
|
|
|
return Ok();
|
|
}
|
|
|
|
[HttpPost("/topggwebhook")]
|
|
[Authorize(Policy = Policies.TopggAuth)]
|
|
public async Task<IActionResult> TopggWebhook([FromBody] TopggVoteWebhookModel data)
|
|
{
|
|
logger.LogInformation("User {UserId} has voted for Bot {BotId} on {Platform}",
|
|
data.User,
|
|
data.Bot,
|
|
"top.gg");
|
|
|
|
await client.VoteReceivedAsync(new GrpcVoteData()
|
|
{
|
|
Type = VoteType.Topgg,
|
|
UserId = data.User,
|
|
});
|
|
|
|
return Ok();
|
|
}
|
|
|
|
[HttpPost("/discordbotlistwebhook")]
|
|
[Authorize(Policy = Policies.DiscordbotlistAuth)]
|
|
public async Task<IActionResult> DiscordbotlistWebhook([FromBody] DiscordbotlistVoteWebhookModel data)
|
|
{
|
|
logger.LogInformation("User {UserId} has voted for Bot on {Platform}",
|
|
data.Id,
|
|
"discordbotlist.com");
|
|
|
|
await client.VoteReceivedAsync(new GrpcVoteData()
|
|
{
|
|
Type = VoteType.Discordbotlist,
|
|
UserId = data.Id,
|
|
});
|
|
|
|
return Ok();
|
|
}
|
|
}
|
|
} |