Работа с событиями

Поскольку PRTelegramBot основан на библиотеке Telegram.Bot, он может использовать его функционал. Из-за того что в PRTelegramBot можно создавать сразу несколько экземпляров ботов, были реализованы разные события на функционал библиотеки Telegram.Bot.

События в PRBot.Events

    /// <summary>
    /// События для бота.
    /// </summary>
    public sealed class TEvents
    {
        #region Поля и свойства

        /// <summary>
        /// Бот для событий.
        /// </summary>
        public PRBotBase Bot { get; private set; }

        /// <summary>
        /// События для обновления типа сообщения.
        /// </summary>
        public MessageEvents MessageEvents { get; private set; }

        /// <summary>
        /// События обновлений.
        /// </summary>
        public UpdateEvents UpdateEvents { get; private set; }

        /// <summary>
        /// События команд.
        /// </summary>
        public CommandsEvents CommandsEvents { get; private set; }

        #endregion

        #region События

        /// <summary>
        /// Событие когда отказано в доступе.
        /// </summary>
        public event Func<BotEventArgs, Task>? OnAccessDenied;

        /// <summary>
        /// Событие когда пользователь написал start с аргументом.
        /// </summary>
        public event Func<StartEventArgs, Task>? OnUserStartWithArgs;

        /// <summary>
        /// Событие когда нужно проверить привилегии перед выполнением команды.
        /// </summary>
        public event Func<PrivilegeEventArgs, Task>? OnCheckPrivilege;

        /// <summary>
        /// Событие когда указан не верный тип сообщения.
        /// </summary>
        public event Func<BotEventArgs, Task>? OnWrongTypeMessage;

        /// <summary>
        /// Событие когда указан не верный тип чат.
        /// </summary>
        public event Func<BotEventArgs, Task>? OnWrongTypeChat;

        /// <summary>
        /// Событие когда не найдена команда.
        /// </summary>
        public event Func<BotEventArgs, Task>? OnMissingCommand;

        /// <summary>
        /// Событие когда произошла ошибка при обработке команды.
        /// </summary>
        public event Func<BotEventArgs, Task>? OnErrorCommand;

        /// <summary>
        /// Событие ошибки.
        /// </summary>
        public event Func<ErrorLogEventArgs, Task>? OnErrorLog;

        /// <summary>
        /// Событие общих логов.
        /// </summary>
        public event Func<CommonLogEventArgs, Task>? OnCommonLog;

        #endregion

        #region Методы

        /// <summary>
        /// Вызвать событие <see cref="OnUserStartWithArgs"/>.
        /// </summary>
        /// <param name="e">Аргументы события.</param>
        internal void OnUserStartWithArgsInvoke(StartEventArgs e) => OnUserStartWithArgs?.Invoke(e);

        /// <summary>
        /// Вызвать событие <see cref="OnMissingCommand"/>.
        /// </summary>
        /// <param name="e">Аргументы события.</param>
        internal void OnMissingCommandInvoke(BotEventArgs e) => OnMissingCommand?.Invoke(e);

        /// <summary>
        /// Вызвать событие <see cref="OnErrorCommand"/>.
        /// </summary>
        /// <param name="e">Аргументы события.</param>
        internal void OnErrorCommandInvoke(BotEventArgs e) => OnErrorCommand?.Invoke(e);

        /// <summary>
        /// Вызвать событие <see cref="OnAccessDenied"/>.
        /// </summary>
        /// <param name="e">Аргументы события.</param>
        internal void OnAccessDeniedInvoke(BotEventArgs e) => OnAccessDenied?.Invoke(e);

        /// <summary>
        /// Вызвать событие <see cref="OnCheckPrivilege"/>.
        /// </summary>
        /// <param name="e">Аргументы события.</param>
        internal void OnCheckPrivilegeInvoke(PrivilegeEventArgs e) => OnCheckPrivilege?.Invoke(e);

        /// <summary>
        /// Вызвать событие <see cref="OnWrongTypeMessage"/>.
        /// </summary>
        /// <param name="e">Аргументы события.</param>
        internal void OnWrongTypeMessageInvoke(BotEventArgs e) => OnWrongTypeMessage?.Invoke(e);

        /// <summary>
        /// Вызвать событие <see cref="OnWrongTypeChat"/>.
        /// </summary>
        /// <param name="e">Аргументы события.</param>
        internal void OnWrongTypeChatInvoke(BotEventArgs e) => OnWrongTypeChat?.Invoke(e);

        /// <summary>
        /// Вызвать событие <see cref="OnErrorLog"/>.
        /// </summary>
        /// <param name="e">Аргументы события.</param>
        public void OnErrorLogInvoke(ErrorLogEventArgs e) => OnErrorLog?.Invoke(e);

        /// <summary>
        /// Вызвать событие <see cref="OnCommonLog"/> через готовый объект аргументов.
        /// </summary>
        /// <param name="e">Создатель аргументов события.</param>
        public void OnCommonLogInvoke(CommonLogEventArgsCreator e) =>
            OnCommonLog?.Invoke(new CommonLogEventArgs(e.Context, e));

        /// <summary>
        /// Вызвать событие <see cref="OnCommonLog"/> с простым сообщением.
        /// </summary>
        /// <param name="message">Текст сообщения.</param>
        public void OnCommonLogInvoke(string message) =>
            OnCommonLogInvoke(new CommonLogEventArgsCreator(message, "Common"));

        /// <summary>
        /// Вызвать событие <see cref="OnCommonLog"/> с указанием типа лога.
        /// </summary>
        /// <param name="message">Текст сообщения.</param>
        /// <param name="type">Тип лога.</param>
        public void OnCommonLogInvoke(string message, string type) =>
            OnCommonLogInvoke(new CommonLogEventArgsCreator(message, type));

        /// <summary>
        /// Вызвать событие <see cref="OnCommonLog"/> с контекстом бота.
        /// </summary>
        /// <param name="message">Текст сообщения.</param>
        /// <param name="type">Тип лога.</param>
        /// <param name="context">Контекст бота.</param>
        public void OnCommonLogInvoke(string message, string type, BotContext context) =>
            OnCommonLogInvoke(new CommonLogEventArgsCreator(message, type, context));

        /// <summary>
        /// Вызвать событие <see cref="OnCommonLog"/> с цветом текста.
        /// </summary>
        /// <param name="message">Текст сообщения.</param>
        /// <param name="type">Тип лога.</param>
        /// <param name="color">Цвет текста в консоли.</param>
        public void OnCommonLogInvoke(string message, string type, ConsoleColor color) =>
            OnCommonLogInvoke(new CommonLogEventArgsCreator(message, type, color));

        /// <summary>
        /// Вызвать событие <see cref="OnCommonLog"/> с цветом текста и контекстом бота.
        /// </summary>
        /// <param name="message">Текст сообщения.</param>
        /// <param name="type">Тип лога.</param>
        /// <param name="color">Цвет текста в консоли.</param>
        /// <param name="context">Контекст бота.</param>
        public void OnCommonLogInvoke(string message, string type, ConsoleColor color, BotContext context) =>
            OnCommonLogInvoke(new CommonLogEventArgsCreator(message, type, color, context));

        /// <summary>
        /// Дополнительный метод вызова <see cref="OnCommonLog"/> с типом лога.
        /// </summary>
        /// <param name="message">Текст сообщения.</param>
        /// <param name="type">Тип лога.</param>
        public void OnCommonLogInvokeInvoke(string message, string type) =>
            OnCommonLogInvoke(new CommonLogEventArgsCreator(message, type));

        #endregion

        #region Конструкторы

        /// <summary>
        /// Конструктор.
        /// </summary>
        /// <param name="bot">Бот.</param>
        public TEvents(PRBotBase bot)
        {
            Bot = bot;
            MessageEvents = new MessageEvents();
            UpdateEvents = new UpdateEvents();
            CommandsEvents = new CommandsEvents();
        }

        #endregion
    }

Пример подписки и использования событий

Создадим статический класс ExampleEvent, который будет хранить методы для событий:

Ниже представлен пример создание нового бота, который подписывается на эти события.

Last updated