JOBot/JOBot.TClient/Statements/PrepareUserState.cs

44 lines
1.4 KiB
C#

using JOBot.TClient.Services;
using Telegram.Bot.Types;
using User = JOBot.Proto.User;
namespace JOBot.TClient.Statements;
public class PrepareUserState(PrepareUserService prepareUserService, MenuService menuService)
{
/// <summary>
/// Try to prepare user if is not registered
/// </summary>
/// <param name="update">Update telegram object</param>
/// <param name="ct">Cancellation token</param>
public async Task TryToPrepareUser(Update update, CancellationToken ct = default)
{
var user = await prepareUserService.GetUser(update, ct);
if (user == null)
user = await prepareUserService.RegisterUser(update, ct);
if (!user.Eula)
{
await prepareUserService.AskForEulaAgreement(update, ct);
return; //interrupt while eula isn't accepted
}
await OnUserEulaValidStage(update, ct);
}
/// <summary>
/// Signal for accepted eula
/// </summary>
/// <param name="update"></param>
/// <param name="ct"></param>
public async Task UserAcceptedEula(Update update, CancellationToken ct = default)
{
await prepareUserService.AcceptEula(update, ct: ct);
await OnUserEulaValidStage(update, ct);
}
private async Task OnUserEulaValidStage(Update update, CancellationToken ct = default)
{
await menuService.RenderMenu(update, ct); //boilerplate
}
}