Новый api отправки сообщений

This commit is contained in:
FrigaT
2025-12-24 08:43:46 +03:00
parent 833d8c80d9
commit 37cb6599ba
19 changed files with 478 additions and 338 deletions

View File

@@ -6,7 +6,6 @@ namespace Demo.Pages;
/// <summary>
/// Страница ввода деталей заявки.
/// Страница с параметрами и получением состояния.
/// </summary>
public sealed class DetailsPage : StatefullPage<string>
{
@@ -32,19 +31,14 @@ public sealed class DetailsPage : StatefullPage<string>
switch (payload)
{
case "next":
{
await SaveState(ctx, ct);
await ctx.Navigation.GoToAsync<FilesPage>(ctx, ct);
break;
}
await SaveState(ctx, ct);
await ctx.Navigation.GoToAsync<FilesPage>(ctx, ct);
break;
case "back":
{
await ctx.Navigation.GoToAsync<TitlePage>(ctx, ct);
break;
}
await ctx.Navigation.GoToAsync<TitlePage>(ctx, ct);
break;
}
;
}
public override async Task OnText(PageContext ctx, string text, CancellationToken ct)
@@ -61,7 +55,6 @@ public sealed class DetailsPage : StatefullPage<string>
string? title = "";
args?.TryGetValue("title", out title);
// Навигация на страницу по имени
await ctx.Navigation.GoToAsync<DetailsPage, string>(ctx, title ?? "", ct);
};
}

View File

@@ -15,7 +15,7 @@ public sealed class FileSendPage : SingletonPage
var demoFile = new FileDescriptor
{
Id = "", // не используется при отправке нового файла
Id = "",
Name = "demo.txt",
Extension = "txt",
Size = stream.Length,

View File

@@ -6,7 +6,7 @@ namespace Demo.Pages;
/// <summary>
/// Страница загрузки файлов.
/// Обычная страница с полученим и сохранением состояния.
/// Обычная страница с получением и сохранением состояния.
/// </summary>
public sealed class FilesPage : SingletonPage
{
@@ -18,15 +18,17 @@ public sealed class FilesPage : SingletonPage
public override async Task OnFile(PageContext ctx, List<FileDescriptor> files, CancellationToken ct)
{
// Пересылаем каждый файл обратно с подтверждением
foreach (var file in files)
{
await ctx.SendFileAsync(file, $"Файл '{file.Name}' получен и отправлен обратно.", ct: ct);
await new MessageBuilder(ctx)
.File(file, $"Файл '{file.Name}' получен и отправлен обратно.")
.SendAsync(ct);
}
//Обращение через Storage
// Сохраняем данные в хранилище состояния
var request = await ctx.StateStorage.GetAsync<Models.Request>(ctx.SessionKey, "Request", ct);
request.FilesCount = files.Count;
//Обращение через Context
await ctx.SetStorageAsync("Request", request, ct);
await new MessageBuilder(ctx)

View File

@@ -10,9 +10,7 @@ public sealed class SubmitPage : SingletonPage
{
public override async Task OnEnter(PageContext ctx, CancellationToken ct)
{
var progress = new MessageBuilder(ctx);
var messageId = await progress
var messageId = await new MessageBuilder(ctx)
.Text("Отправка заявки\n7%")
.SendAsync(ct);
@@ -21,7 +19,7 @@ public sealed class SubmitPage : SingletonPage
{
i += 25;
Thread.Sleep(TimeSpan.FromMilliseconds(200));
await progress
await new MessageBuilder(ctx)
.Text($"Отправка заявки\n{i}%")
.EditMessage(messageId!)
.SendAsync(ct);

View File

@@ -5,7 +5,6 @@ using BotPages.Core.Messaging;
namespace Demo.Pages;
/// <summary>
/// Страница ввода заголовка заявки.
/// Обычная страница вводом текста.
/// </summary>
public sealed class TitlePage : SingletonPage
{

View File

@@ -7,7 +7,6 @@ namespace Demo.Pages;
/// <summary>
/// Стартовая страница демо‑бота.
/// Обычная страница с кнопками
/// </summary>
[Route("Welcome")]
public sealed class WelcomePage : SingletonPage
@@ -31,19 +30,13 @@ public sealed class WelcomePage : SingletonPage
switch (button)
{
case WelcomePageButtons.CreateRequest:
{
return ctx.Navigation.GoToAsync<TitlePage>(ctx, ct);
}
return ctx.Navigation.GoToAsync<TitlePage>(ctx, ct);
case WelcomePageButtons.Help:
{
return new MessageBuilder(ctx).Text("Здесь будет справка.", MessageFormat.Plain).SendAsync(ct);
}
return new MessageBuilder(ctx).Text("Здесь будет справка.", MessageFormat.Plain).SendAsync(ct);
case WelcomePageButtons.SendFile:
{
return ctx.Navigation.GoToAsync<FileSendPage>(ctx, ct);
}
return ctx.Navigation.GoToAsync<FileSendPage>(ctx, ct);
}
return base.OnText(ctx, text, ct);