Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
using PRTelegramBot.Attributes;
using Telegram.Bot;
using Telegram.Bot.Types;
using PRTelegramBot.Interfaces;

namespace AspNetExample.BotController
{
[BotHandler]
public class BotHandlerOnlyStatic
{
[ReplyMenuHandler("TestStatic")]
public async static Task StaticTestMethod(ITelegramBotClient botClient, Update update)
public async static Task StaticTestMethod(IBotContext context)
{
await PRTelegramBot.Helpers.Message.Send(botClient, update, nameof(StaticTestMethod));
await PRTelegramBot.Helpers.Message.Send(context, nameof(StaticTestMethod));
}
}
}
67 changes: 32 additions & 35 deletions Examples/AspNetExample/BotController/BotHandlerWithDependency.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
using AspNetExample.Services;
using PRTelegramBot.Attributes;
using PRTelegramBot.Configs;
using PRTelegramBot.Extensions;
using PRTelegramBot.Interfaces;
using PRTelegramBot.Models;
using PRTelegramBot.Models.Enums;
using PRTelegramBot.Models.InlineButtons;
using PRTelegramBot.Utils;
using Telegram.Bot;
using Telegram.Bot.Types;
using PRTelegramBot.Extensions;
using TestDI.Models;

namespace AspNetExample.BotController
Expand All @@ -32,133 +29,133 @@ public BotHandlerWithDependency(ServiceScoped serviceScoped, ServiceTransient se
}

[ReplyMenuHandler("Test")]
public async Task TestMethodWithDependency(ITelegramBotClient botClient, Update update)
public async Task TestMethodWithDependency(IBotContext context)
{
await PRTelegramBot.Helpers.Message.Send(botClient, update, $"{nameof(TestMethodWithDependency)} {_logger != null}");
await PRTelegramBot.Helpers.Message.Send(context, $"{nameof(TestMethodWithDependency)} {_logger != null}");
}

[SlashHandler("/test")]
public async Task Slash(ITelegramBotClient botClient, Update update)
public async Task Slash(IBotContext context)
{
await PRTelegramBot.Helpers.Message.Send(botClient, update, nameof(Slash));
await PRTelegramBot.Helpers.Message.Send(context, nameof(Slash));
}

[ReplyMenuHandler("inline")]
public async Task InlineTest(ITelegramBotClient botClient, Update update)
public async Task InlineTest(IBotContext context)
{
var options = new OptionMessage();
var menuItemns = MenuGenerator.InlineButtons(1, new List<IInlineContent> {
new InlineCallback("Test", PRTelegramBotCommand.CurrentPage),
new InlineCallback("TestStatic", PRTelegramBotCommand.NextPage)
});
options.MenuInlineKeyboardMarkup = MenuGenerator.InlineKeyboard(menuItemns);
await PRTelegramBot.Helpers.Message.Send(botClient, update, nameof(InlineTest), options);
await PRTelegramBot.Helpers.Message.Send(context, nameof(InlineTest), options);
}

[ReplyMenuHandler("inlinestatic")]
public async Task StaticInlineTest(ITelegramBotClient botClient, Update update)
public async Task StaticInlineTest(IBotContext context)
{
var options = new OptionMessage();
var menuItemns = MenuGenerator.InlineButtons(1, new List<IInlineContent> {
new InlineCallback("Test", PRTelegramBotCommand.CurrentPage),
new InlineCallback("TestStatic", PRTelegramBotCommand.NextPage)
});
options.MenuInlineKeyboardMarkup = MenuGenerator.InlineKeyboard(menuItemns);
await PRTelegramBot.Helpers.Message.Send(botClient, update, nameof(StaticInlineTest), options);
await PRTelegramBot.Helpers.Message.Send(context, nameof(StaticInlineTest), options);
}

[InlineCallbackHandler<PRTelegramBotCommand>(PRTelegramBotCommand.CurrentPage)]
public async Task InlineHandler(ITelegramBotClient botClient, Update update)
public async Task InlineHandler(IBotContext context)
{
await PRTelegramBot.Helpers.Message.Send(botClient, update, nameof(InlineHandler));
await PRTelegramBot.Helpers.Message.Send(context, nameof(InlineHandler));
}

[InlineCallbackHandler<PRTelegramBotCommand>(PRTelegramBotCommand.NextPage)]
public async static Task InlineHandlerStatic(ITelegramBotClient botClient, Update update)
public async static Task InlineHandlerStatic(IBotContext context)
{
await PRTelegramBot.Helpers.Message.Send(botClient, update, nameof(InlineHandlerStatic));
await PRTelegramBot.Helpers.Message.Send(context, nameof(InlineHandlerStatic));
}

/// <summary>
/// Напишите в чате "stepstart"
/// Метод регистрирует следующий шаг пользователя
/// </summary>
[ReplyMenuHandler("stepstart")]
public async Task StepStart(ITelegramBotClient botClient, Update update)
public async Task StepStart(IBotContext context)
{
string msg = "Тестирование функции пошагового выполнения\nНапишите ваше имя";
//Регистрация обработчика для последовательной обработки шагов и сохранение данных
update.RegisterStepHandler(new StepTelegram(StepOne, new StepCache()));
await PRTelegramBot.Helpers.Message.Send(botClient, update, msg);
context.Update.RegisterStepHandler(new StepTelegram(StepOne, new StepCache()));
await PRTelegramBot.Helpers.Message.Send(context, msg);
}

/// <summary>
/// При написание любого текста сообщения или нажатие на любую кнопку из reply для пользователя будет выполнен этот метод.
/// Метод регистрирует следующий шаг с максимальным времени выполнения
/// </summary>
public async Task StepOne(ITelegramBotClient botClient, Update update)
public async Task StepOne(IBotContext context)
{
string msg = $"Шаг 1 - Ваше имя {update.Message.Text}" +
string msg = $"Шаг 1 - Ваше имя {context.Update.Message.Text}" +
$"\nВведите дату рождения";
//Получаем текущий обработчик
var handler = update.GetStepHandler<StepTelegram>();
var handler = context.Update.GetStepHandler<StepTelegram>();
//Записываем имя пользователя в кэш
handler!.GetCache<StepCache>().Name = update.Message.Text;
handler!.GetCache<StepCache>().Name = context.Update.Message.Text;
//Регистрация следующего шага с максимальным ожиданием выполнения этого шага 5 минут от момента регистрации
handler.RegisterNextStep(StepTwo);
await PRTelegramBot.Helpers.Message.Send(botClient, update, msg);
await PRTelegramBot.Helpers.Message.Send(context, msg);
}

/// <summary>
/// Напишите в чат любой текст и будет выполнена эта команда если у пользователя был записан следующий шаг
/// </summary>
public async Task StepTwo(ITelegramBotClient botClient, Update update)
public async Task StepTwo(IBotContext context)
{
string msg = $"Шаг 2 - дата рождения {update.Message.Text}" +
string msg = $"Шаг 2 - дата рождения {context.Update.Message.Text}" +
$"\nНапиши любой текст, чтобы увидеть результат";
//Получаем текущий обработчик
var handler = update.GetStepHandler<StepTelegram>();
var handler = context.Update.GetStepHandler<StepTelegram>();
//Записываем дату рождения
handler!.GetCache<StepCache>().BirthDay = update.Message.Text;
handler!.GetCache<StepCache>().BirthDay = context.Update.Message.Text;
//Регистрация следующего шага с максимальным ожиданием выполнения этого шага 5 минут от момента регистрации
handler.RegisterNextStep(StepThree, DateTime.Now.AddMinutes(1));
//Настройки для сообщения
var option = new OptionMessage();
//Добавление пустого reply меню с кнопкой "Главное меню"
//Функция является приоритетной, если пользователь нажмет эту кнопку будет выполнена функция главного меню, а не следующего шага.
//option.MenuReplyKeyboardMarkup = MenuGenerator.ReplyKeyboard(1, new List<string>(), true, botClient.GetConfigValue<BotConfigJsonProvider, string>(ExampleConstants.BUTTONS_FILE_KEY, "RP_MAIN_MENU"));
await PRTelegramBot.Helpers.Message.Send(botClient, update, msg, option);
await PRTelegramBot.Helpers.Message.Send(context, msg, option);
}


/// <summary>
/// Напишите в чат любой текст и будет выполнена эта команда если у пользователя был записан следующий шаг
/// </summary>
public async Task StepThree(ITelegramBotClient botClient, Update update)
public async Task StepThree(IBotContext context)
{
//Получение текущего обработчика
var handler = update.GetStepHandler<StepTelegram>();
var handler = context.Update.GetStepHandler<StepTelegram>();
//Получение текущего кэша
var cache = handler!.GetCache<StepCache>(); ;
string msg = $"Шаг 3 - Результат: Имя:{cache.Name} дата рождения:{cache.BirthDay}" +
$"\nПоследовательность шагов очищена.";
//Последний шаг
handler.LastStepExecuted = true;
await PRTelegramBot.Helpers.Message.Send(botClient, update, msg);
await PRTelegramBot.Helpers.Message.Send(context, msg);
}

/// <summary>
/// Если есть следующий шаг, он будет проигнорирован при выполнение данной команды
/// Потому что в ReplyMenuHandler значение первого аргумента установлено в true, что значит приоритетная команда
/// </summary>
[ReplyMenuHandler("ignorestep")]
public static async Task IngoreStep(ITelegramBotClient botClient, Update update)
public static async Task IngoreStep(IBotContext context)
{
string msg = update.HasStepHandler()
string msg = context.Update.HasStepHandler()
? "Следующий шаг проигнорирован"
: "Следующий шаг отсутствовал";

await PRTelegramBot.Helpers.Message.Send(botClient, update, msg);
await PRTelegramBot.Helpers.Message.Send(context, msg);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using PRTelegramBot.Attributes;
using PRTelegramBot.Interfaces;
using PRTelegramBot.Models.Enums;
using Telegram.Bot;
using Telegram.Bot.Types;

namespace AspNetExample.BotController
{
Expand All @@ -14,15 +13,15 @@ public BotHandlerWithoutDependency()
}

[ReplyMenuHandler("Testnodi")]
public async Task TestMethodWithoutDependency(ITelegramBotClient botClient, Update update)
public async Task TestMethodWithoutDependency(IBotContext context)
{
await PRTelegramBot.Helpers.Message.Send(botClient, update, $"{nameof(TestMethodWithoutDependency)}");
await PRTelegramBot.Helpers.Message.Send(context, $"{nameof(TestMethodWithoutDependency)}");
}

[SlashHandler(CommandComparison.Equals, "/Testnodi")]
public async Task SlashNoDi(ITelegramBotClient botClient, Update update)
public async Task SlashNoDi(IBotContext context)
{
await PRTelegramBot.Helpers.Message.Send(botClient, update, nameof(SlashNoDi));
await PRTelegramBot.Helpers.Message.Send(context, nameof(SlashNoDi));
}
}
}
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
using AspNetExample.Services;
using PRTelegramBot.Attributes;
using PRTelegramBot.Core;
using PRTelegramBot.Interfaces;
using PRTelegramBot.Models;
using PRTelegramBot.Models.Enums;
using PRTelegramBot.Models.InlineButtons;
using PRTelegramBot.Utils;
using Telegram.Bot;
using Telegram.Bot.Types;
using TestDI.Models;

Expand All @@ -29,21 +27,21 @@ public BotInlineHandlerWithDependency(ServiceScoped serviceScoped, ServiceTransi
_logger = logger;
}

public async Task<UpdateResult> Handle(PRBotBase bot, Update update, CallbackQuery updateType)
public async Task<UpdateResult> Handle(IBotContext context, CallbackQuery updateType)
{
await PRTelegramBot.Helpers.Message.Send(bot.botClient, update, $"{nameof(Handle)} {_logger != null}");
await PRTelegramBot.Helpers.Message.Send(context, $"{nameof(Handle)} {_logger != null}");
return UpdateResult.Handled;
}

[ReplyMenuHandler("InlineClass")]
public async Task InlineTest(ITelegramBotClient botClient, Update update)
public async Task InlineTest(IBotContext context)
{
var options = new OptionMessage();
var menuItemns = MenuGenerator.InlineButtons(1, new List<IInlineContent> {
new InlineCallback("Test", ClassTHeader.DefaultTestClass)
});
options.MenuInlineKeyboardMarkup = MenuGenerator.InlineKeyboard(menuItemns);
await PRTelegramBot.Helpers.Message.Send(botClient, update, nameof(InlineTest), options);
await PRTelegramBot.Helpers.Message.Send(context, nameof(InlineTest), options);
}
}
}
2 changes: 1 addition & 1 deletion Examples/AspNetExample/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ async Task PrBotInstance_OnLogCommon(CommonLogEventArgs e)

prBotInstance.Events.OnCommonLog += PrBotInstance_OnLogCommon;
prBotInstance.Events.OnErrorLog += PrBotInstance_OnLogError;
await prBotInstance.Start();
await prBotInstance.StartAsync();


app.Run();
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using AspNetWebHook.Filter;
using Microsoft.AspNetCore.Mvc;
using PRTelegramBot.Configs;
using PRTelegramBot.Core;
using PRTelegramBot.Models.Enums;
using Telegram.Bot.Types;
Expand All @@ -24,7 +23,7 @@ public async Task<IActionResult> Post([FromBody] Update update)
var secretToken = bot.Options.WebHookOptions.SecretToken;
if (string.Equals(secretTokenHeader, secretToken, StringComparison.Ordinal))
{
await bot.Handler.HandleUpdateAsync(bot.botClient, update, bot.Options.CancellationToken.Token);
await bot.Handler.HandleUpdateAsync(bot.BotClient, update, bot.Options.CancellationTokenSource.Token);
return Ok();
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using PRTelegramBot.Configs;
using PRTelegramBot.Core;
using PRTelegramBot.Models.Enums;

Expand Down
11 changes: 7 additions & 4 deletions Examples/AspNetWebHookExample/Services/BotHostedService.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using PRTelegramBot.Core;
using PRTelegramBot.Models;
using PRTelegramBot.Models.Enums;
using PRTelegramBot.Models.EventsArgs;

namespace AspNetWebHook.Services
{
Expand All @@ -25,13 +27,14 @@ private async Task StartBots()
{
bot.Options.ServiceProvider = serviceProvider;
bot.ReloadHandlers();
await bot.Start();
await bot.StartAsync();

if (bot.DataRetrieval == DataRetrievalMethod.WebHook)
{
var webHookResult = await((PRBotWebHook)bot).GetWebHookInfo();
var webHookResult = await((PRBotWebHook)bot)
.GetWebHookInfoAsync(bot.Options.CancellationTokenSource.Token);
if (!string.IsNullOrEmpty(webHookResult.LastErrorMessage))
bot.Events.OnErrorLogInvoke(new Exception(webHookResult.LastErrorMessage));
bot.Events.OnErrorLogInvoke(new ErrorLogEventArgs(new BotContext(bot), new Exception(webHookResult.LastErrorMessage)));
}
}
}
Expand All @@ -41,7 +44,7 @@ public async Task StopAsync(CancellationToken cancellationToken)
var bots = BotCollection.Instance.GetBots();
foreach (var bot in bots)
{
await bot.Stop();
await bot.StopAsync();
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,23 @@
using ConsoleExample.Attributes;
using PRTelegramBot.Core;
using PRTelegramBot.Extensions;
using PRTelegramBot.Interfaces;
using PRTelegramBot.Models;
using PRTelegramBot.Models.Enums;
using System.Reflection;
using Telegram.Bot.Types;

namespace ConsoleExample.Checkers
{
internal class AdminExampleChecher : IInternalCheck
internal class AdminExampleChecker : IInternalCheck
{
public async Task<InternalCheckResult> Check(PRBotBase bot, Update update, CommandHandler handler)
public async Task<InternalCheckResult> Check(IBotContext context, CommandHandler handler)
{
var method = handler.Method;
var adminAttribute = method.GetCustomAttribute<AdminOnlyExampleAttribute>();
if(adminAttribute != null)
{
var userIsAdmin = await bot.IsAdmin(update.GetChatId());
var userIsAdmin = await context.IsAdmin(context.Update.GetChatId());
if(!userIsAdmin)
await PRTelegramBot.Helpers.Message.Send(bot.botClient, update.GetChatId(), "Вы не админ!");
await PRTelegramBot.Helpers.Message.Send(context, "Вы не админ!");

return userIsAdmin ? InternalCheckResult.Passed : InternalCheckResult.Custom;
}
Expand Down
6 changes: 2 additions & 4 deletions Examples/ConsoleExample/Checkers/ReplyExampleChecker.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
using PRTelegramBot.Core;
using PRTelegramBot.Interfaces;
using PRTelegramBot.Interfaces;
using PRTelegramBot.Models;
using PRTelegramBot.Models.Enums;
using Telegram.Bot.Types;

namespace ConsoleExample.Checkers
{
internal class ReplyExampleChecker : IInternalCheck
{
public async Task<InternalCheckResult> Check(PRBotBase bot, Update update, CommandHandler handler)
public async Task<InternalCheckResult> Check(IBotContext context, CommandHandler handler)
{
// Что-то проверяем перед выполнением reply команд.
// InternalCheckResult.Passed - продолжить выполнение команды, любые другие результаты остановят выполнение команды.
Expand Down
2 changes: 1 addition & 1 deletion Examples/ConsoleExample/Configs/telegram.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
{
"TelegramConfig": {
// Токен для телеграм бота
"Token": "",
"Token": string.Empty,
//Идентификаторы администраторов бота,
//Пример Admins": [5125555, 23542352, 32452352, 34534534],
"Admins": [],
Expand Down
Loading
Loading