[Telegram] Core

[Telegram] Core 2.0.5 Alpha 9

Нет прав для скачивания
Это - альфа-версия дополнения. Я не гарантирую её стабильную работоспособность и всё в этом духе. Установка исключительно на Ваш страх и риск.
Вы по прежнему можете скачать и установить последнюю стабильную на данный момент версию (2.0.4) с вкладки "История" или
по этой ссылке.
Т.к. это альфа-версия, собранный билд не был опубликован на Гите.

Исправлено​

  • Исправлена ошибка, когда дополнение пыталось получить Entity Manager движка из неправильного места. Спасибо за репорт dimka1510.
  • Исправлена (?) ошибка, когда связанные с UserCommand сущности (шаблон сообщения и обработчик команды) не удалялись.

Добавлено​

  • Добавлен нестандартный рендерер бб-кодов smTgCoreMarkdown, преобразующий полученную строку с бб-кодами - в совместимую с Markdown v2 разметку.
Это - альфа-версия дополнения. Я не гарантирую её стабильную работоспособность и всё в этом духе. Установка исключительно на Ваш страх и риск, но могу заверить, что данная версия установлена уже около месяца на продакшн-сайте, и особых проблем не вызывала. Я честно постарался минимизировать кол-во возможных проблем.
Вы по прежнему можете скачать и установить последнюю стабильную на данный момент версию (2.0.4) с вкладки "История" или
по этой ссылке.
Т.к. это альфа-версия, собранный билд не был опубликован на Гите.


Что ж, вот потихоньку мы и готовимся к улучшениям, направленным преимущественно на разработчиков. Эта версия привносит новый механизм обработки направленных боту команд - Command Dispatcher.
Суть механизма в том, что теперь Вам не нужно слушать событие создания клиента и вручную туда пропихивать обработчик Вашей команды. Вместо этого, Вы в базе создаёте запись в одной из таблиц (пример будет ниже), пишете простейший хандлер (пример так же ниже), а дальше ядро само разруливает, как до Вас добраться и что Вам передать. Просто, правда?

Так же был завезён прототип механизма, который позволит администратору объявлять свои простые обработчики команд с условно статичным текстом. Синтаксис шаблонизатора XF в текстах ответов полностью поддерживается, что позволяет делать легко и просто - подобные штуки:
1600097449121.png

В будущем планируется возможность добавлять кастомные PHP-обработчики над запросом к API Telegram (и не только), что позволит написать минимум кода для добавления кнопки в сообщение наподобие такой:
1600097578105.png

А, возможно, и полноценный конструктор (если осилю вёрстку). Но пока как-то так.

Полный список изменений​

Добавлено

  • Command Dispatcher. Новый механизм, нацеленный на повышение простоты реализации своих команд.
  • Встроенный механизм для "регистрации" своих небольших, простых команд. В будущем планируется развитие механизма.

Изменено

  • Все реализации стандартных команд (/start, /auth) переехали на новый механизм.
  • Рефакторинг энтити БД и сервиса установки веб-хука.
    OFFTOP

    Как оно вообще работало?!

  • Для работы теперь требуется [SModders] Core v1.0.2.3

Удалено

  • Импортёр данных с первой версии более не включен в состав ядра, и будет выложен позднее отдельным дополнением. Если Вам действительно необходимо обновиться с первой ветки (а импортёра всё ещё нет) - лучше сначала установите 2.0.4 и/или ниже, выполните импорт, а после - обновитесь.

Пример обработчика​

Самый простейший обработчик команды для нового Command Dispatcher:
PHP:
<?php

/**
 * This file is a part of "[Telegram] Chat Access" addOn for XF v2.1.
 * All rights is reserved.
 *
 * Developed by SourceModders.
 */

namespace SModders\TelegramChatAccess\ChatCommand;


use SModders\TelegramCore\ChatCommand\AbstractHandler;
use TelegramBot\Api\Types\Message;

class ChatSetup extends AbstractHandler
{
    public function run(Message $message, array $parameters = [])
    {
        $user = \XF::visitor(); // $user - это пользователь внутри XF, запустивший команду, если есть привязанный аккаунт; иначе гость
        if ($user->is_admin)
        {
            $chatId = $message->getChat()->getId();

            /** @var \XF\Repository\Option $optionRepo */
            $optionRepo = $this->app->repository('XF:Option');
            $optionRepo->updateOption('smodders_tgchataccess__chat_id', $chatId);

            $this->telegramClient->sendMessage($chatId, \XF::phrase('smodders_tgchataccess__bot.changed_chat', ['user' => $user->username]));
        }

        return $this->next($message, $parameters); // next() нужен, чтобы разрешить диспатчеру "провалиться" дальше и искать ещё обработчики команды. $message и $parameters здесь фигурируют, если Вы хотите немного поменять контекст для следующих обработчиков.
    }
}
А для регистрации - Вам понадобится создать энтити и сохранить её.
PHP:
/** @var \SModders\TelegramCore\Entity\Command $command */
$command = \XF::app()->em()->create('SModders\TelegramCore:Command');
$command->bulkSet([
    'name' => 'chat_setup',
    'provider_class' => 'SModders\TelegramChatAccess:ChatSetup',
    'execution_order' => 10 // стандартное значение, необязательно передавать
]);

$command->save();
Так же, Вы можете вручную внести запись в таблицу xf_smodders_tgcore_command, но тогда Вам ещё придётся после внесения записи запускать метод репозитория на перестроение кеша обработчиков команд:
PHP:
\XF::app()->repository('SModders\TelegramCore:Command')
    ->rebuildAddOnCommandsCache();
Реализована своя обёртка над \XF::asVisitor(), который, помимо установки активного пользователя, так же изменяет язык и стиль. Это необходимо для внутреннего функционала аддона и его модулей.

Как итог, исправлена назойливая "фича", когда бот отправлял сообщения для стандартного языка для той же авторизации:
tg_image_47615086.jpeg

OFFTOP

Но пока этот метод нужно дёргать вручную. Возможно в будущем чонить придумаю, чтобы оно неявно для разработчика уже уходило в скоуп пользователя.

  • Мне нравится
Реакции: -OZ- и Desalin
Исправлена ошибка, которая могла вылезать если пользователь заблокировал общение с ботом сразу же после отправки команды авторизации.
Удалены классы SModders\TelegramCore\AuthMethod. Теперь используется по-умолчанию страница с кнопкой, с вариантом перехода к боту (если кнопка не отображается).

Спасибо root за обновление страницы с кнопкой.
[Настройки]
  • В раздел настроек аддона добавлена панель с некоторыми администраторскими действиями:
    • Проверка подключения до Telegram API;
    • Получение информации от Telegram касательно текущего состояния вебхуков (есть ли ошибки в доставке, сколько ещё сообщений не доставлено до движка и др.);
    • Обновление данных веб-хука. Может быть полезно, если ссылка не совпадает по некоторым причинам.
    1574271550680.png
  • Добавлена проверка на использование HTTPS протокола для доставки веб-хуков. Если ссылка на форум указана с http или прокси используется с http протоколом - аддон известит Вам об этом при попытке сменить режим работы.

[Локализация]
  • Вынесена забытая строчка текста в фразу (сообщение о необходимости прокси на странице настройки провайдера - smodders_tgcore.proxy_message).
  • Добавлено множество новых фраз, связанных с настройками и состоянием.
Официальный релиз 2.0.0. С этого момента, ветка 1.х считается устаревшей и не поддерживается.

По сравнению с прошлым RC5, добавлен сток в контейнер для временной смены активного посетителя-пользователя - на другого, к которому привязан переданный аккаунт Telegram.
  • Мне нравится
Реакции: Captain, Skaiman и West14
Добавлен импортёр данных с [Telegram] Core 1.x.
Минимально требуемая версия старого ядра для старта импорта - 1.0.7 и выше.

Для импорта, необходимо, чтобы старое ядро было установлено. После произведения операции импорта, его можно удалить.

Импортёр добавляется в подраздел "Импорт данных" в админке (/admin.php?import/):
1571428681110.png


Это - последняя, предрелизная версия. Если до конца октября проблем не возникнет - выйдет финальный патч с небольшими изменениями уже под видом релизной версии.
Исправлен эпический фэйл, связанный с невозможностью авторизоваться через Telegram без указания username и last name в самом Telegram.

Большое спасибо
  • West14 за помощь в отладке проблемы
  • STARTS и hurtman за репорты.
  • Изменён способ формирования ссылки на контроллер для веб-хуков. За репорт о баге спасибо hurtman
  • Добавлены забытые заголовки в некоторых файлах исходников
  • Исправлена ошибка в удалении связанных с аддоном аккаунтов при деинсталляции
Назад
Сверху Снизу