Skip to content

Commit

Permalink
Add debug option
Browse files Browse the repository at this point in the history
  • Loading branch information
DanyaSWorlD committed Mar 7, 2024
1 parent 6647a1d commit e9ce7ee
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
22 changes: 22 additions & 0 deletions MidpassAutoQueue/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,10 @@
string country = Environment.GetEnvironmentVariable("COUNTRY") ?? throw new Exception("Нет страны");
string facility = Environment.GetEnvironmentVariable("FACILITY") ?? throw new Exception("Нет учереждения");
string cToken = Environment.GetEnvironmentVariable("CAPTCHA_TOKEN") ?? throw new Exception("Нет токена капчи");
bool.TryParse(Environment.GetEnvironmentVariable("DEBUG"), out bool debug);

const string captcha = "captcha.png";
const string screenshot = "screenshot.png";

Console.WriteLine();

Expand Down Expand Up @@ -65,20 +67,23 @@ async Task<TimeSpan> Work()
var solver = new Solver(cToken);
var code = await solver.SolveCaptcha(captcha);
await page.Locator("#Captcha").FillAsync(code.Value.code);
await MakeDebugScreenshot(page);
await page.GetByText("Войти").ClickAsync();

if (page.Url == "https://q.midpass.ru/ru/Account/DoPrivatePersonLogOn")
{
if (await page.GetByText("Не заполнено \"Символы с картинки\"").IsVisibleAsync())
{
await solver.Report(code.Value.id, false);
await MakeDebugScreenshot(page);
await telegramBot.SendMessageAsync(userId, $"Проблемы с капчей, пробую еще раз.");
continue;
}

if (await page.GetByText("Неверный адрес электронной почты или пароль").IsVisibleAsync())
{
await solver.Report(code.Value.id);
await MakeDebugScreenshot(page);
await telegramBot.SendMessageAsync(userId, $"Пароль не подошел, жду новый");
pass = await telegramBot.GetResponseAsync(userId) ?? "";
await telegramBot.SendMessageAsync(userId, $"Не забудь обновить конфиг");
Expand All @@ -89,6 +94,7 @@ async Task<TimeSpan> Work()
if (page.Url == "https://q.midpass.ru/ru/Account/BanPage")
{
await solver.Report(code.Value.id);
await MakeDebugScreenshot(page);
await telegramBot.SendMessageAsync(userId, "Они подозревают, что я робот. Нужен новый пароль");
pass = await telegramBot.GetResponseAsync(userId) ?? "";
await telegramBot.SendMessageAsync(userId, "Ок, следующая попытка через час. И не забудь обновить пароль в конфиге!");
Expand All @@ -99,21 +105,25 @@ async Task<TimeSpan> Work()
solved = true;
}

await MakeDebugScreenshot(page);
await page.GetByText("Лист ожидания").ClickAsync();
var xhrResponse = await page.WaitForResponseAsync("https://q.midpass.ru/ru/Appointments/FindWaitingAppointments");
var body = System.Text.Encoding.Default.GetString(await xhrResponse.BodyAsync());
var regex = new Regex("\"PlaceInQueue\":([0-9]+),");
var placeInQueue = regex.Match(body).Groups.Values.Last();
await telegramBot.SendMessageAsync(userId, $"Место в очереди: {placeInQueue}");
await page.GetByRole(AriaRole.Checkbox).Last.ClickAsync();
await MakeDebugScreenshot(page);

var confirmButton = page.GetByText("Подтвердить заявку");
if (await page.Locator("#confirmAppointments").And(page.Locator(".l-btn-disabled")).CountAsync() == 1)
{
await MakeDebugScreenshot(page);
await telegramBot.SendMessageAsync(userId, $"Кнопка не активна, с последнего подтверждения прошло менее 24ч, следующая попытка через 8 часов");
return TimeSpan.FromHours(8);
}

await MakeDebugScreenshot(page);
await page.GetByText("Подтвердить заявку").ClickAsync();

solved = false;
Expand All @@ -123,19 +133,31 @@ async Task<TimeSpan> Work()
var solver = new Solver(cToken);
var code = await solver.SolveCaptcha(captcha);
await page.Locator("#captchaValue").FillAsync(code.Value.code);
await MakeDebugScreenshot(page);
await page.GetByText("Подтвердить").Last.ClickAsync();
await page.WaitForResponseAsync("");
if (await page.GetByText("Не заполнено \"Символы с картинки\"").IsVisibleAsync())
{
await solver.Report(code.Value.id, false);
await MakeDebugScreenshot(page);
await telegramBot.SendMessageAsync(userId, $"Проблемы с капчей, пробую еще раз.");
await page.GetByText("Ок").And(page.GetByRole(AriaRole.Button)).First.ClickAsync();
await MakeDebugScreenshot(page);
continue;
}

await MakeDebugScreenshot(page);
await telegramBot.SendMessageAsync(userId, $"Заявка подтверждена, следующее подтверждение через сутки");
solved = true;
}

return TimeSpan.FromDays(1);
}

async Task MakeDebugScreenshot(IPage page)
{
if (!debug) return;

await page.ScreenshotAsync(new() { Path = screenshot });
await telegramBot.SendImageAsync(userId, screenshot);
}
7 changes: 7 additions & 0 deletions MidpassAutoQueue/TelegramBot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,13 @@ await _botClient.SendTextMessageAsync(
cancellationToken: _cancellationTokenSource.Token);
}

public async Task SendImageAsync(long chatId, string imgPath)
{
await _botClient.SendPhotoAsync(
chatId: chatId,
photo: InputFile.FromString(imgPath));
}


private async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
{
Expand Down

0 comments on commit e9ce7ee

Please sign in to comment.