54 lines
1.7 KiB
C#
54 lines
1.7 KiB
C#
using JOBot.Proto;
|
|
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) ?? await prepareUserService.RegisterUser(update, ct);
|
|
|
|
if (!user.Eula)
|
|
{
|
|
await prepareUserService.AskForEulaAgreement(update, ct);
|
|
return; //interrupt while eula isn't accepted
|
|
}
|
|
|
|
await OnUserEulaValidStage(user, update, ct);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Signal for accepted eula
|
|
/// </summary>
|
|
/// <param name="user"></param>
|
|
/// <param name="update"></param>
|
|
/// <param name="ct"></param>
|
|
public async Task AcceptEula(GetUserResponse user, Update update, CancellationToken ct = default)
|
|
{
|
|
await prepareUserService.AcceptEula(update, ct: ct);
|
|
await OnUserEulaValidStage(user, update, ct);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Continue prepare stage
|
|
/// </summary>
|
|
/// <param name="user"></param>
|
|
/// <param name="update"></param>
|
|
/// <param name="ct"></param>
|
|
private async Task OnUserEulaValidStage(GetUserResponse user, Update update, CancellationToken ct = default)
|
|
{
|
|
if (!user.IsLogged)
|
|
{
|
|
prepareUserService.Auth(update, ct);
|
|
}
|
|
await menuService.RenderMenu(update, ct); //boilerplate
|
|
}
|
|
} |