The Dragon Code News
260 subscribers
218 photos
7 videos
4 files
239 links
Рассказываем о том, над чем работаем и что может быть полезным разработчикам 🙂

dragon-code.pro
Download Telegram
Во время разработки иногда возникает необходимость быстрой подсказки имён файлов из какой-либо директории.

Обычно мы пишем полный путь начинающийся либо от текущего местоположения (__DIR__), либо от функции-хелпера Laravel (base_path(), resource_path() и т.д.).

Минусы этого способа в том, что:

1. нужно всегда помнить где находится файл либо искать его, надеясь на подсказки шторма;
2. таких мест вызова может быть много и в случае изменения расположения файлов, нужно их все обновлять.

При помощи плагина Laravel Idea для PhpStorm можно значительно упростить это действие.

Допустим у нас есть функция webhook(), в которую мы хотим передавать не полный, а относительный директории путь.

Для этого создаём в корне проекта файл ide.json и вставляем в него следующее содержимое, не забыв изменить имя функции (или нескольких), а также путь к директории:

{
"$schema": "https://laravel-ide.com/schema/laravel-ide-v2.json",
"completions": [
{
"complete": "directoryFiles",
"condition": [
{
"functionNames": ["webhook"],
"place": "parameter",
"parameters": [1]
}
],
"options": {
"directory": "tests/Fixtures",
"recursive": true
}
}
]
}


И добавляем префикс директории в функции. Например:

function webhook(string $filename): void
{
$content = json_decode(file_get_contents(
base_path('tests/Fixtures/' . $filename)
), true);

// some actions
}


Всё! Обращение к пути выглядит компактно, красиво и функционально:

it('with reply', function () {
webhook('Callbacks/welcome.json');
});


В качестве бонуса работает Ctrl/Cmd+Click по пути - плагин перебросит Вас в файл 🙂
🔥5
⚡️ Laravel Octane для тех, кто хочет быстро вкатиться, но не знает с чего начать

Возникла необходимость запустить вышеупомянутый сервис с RoadRunner на одном из проектов, и чтобы не ходить вокруг да около, прилагаю процесс в "сухом" виде:

При разработке под Windows нужно обязательно войти в подсистему Linux (wsl или в контейнер виртуализации), так как под самим Windows запустить RoadRunner можно, но вот Laravel Octane - нет. Причина в использовании функций сигналов, отсутствующих в Windows. Дальше для всех одинаково.



1. Устанавливаем зависимости:

composer require laravel/octane spiral/roadrunner spiral/roadrunner-cli spiral/roadrunner-http


2. Выполняем консольную команду php artisan octane:install выбирая следующие пункты:
2.1. Which app? roadrunner
2.2. Download binary? Yes

Всё. Октан готов к работе. Можете запускать консольную команду php artisan octane:start --poll и наслаждаться им.

Но есть один нюанс, во всяком случае под Windows. Запуская октан в wsl, он не будет сохранять состояние приложения и при каждом обновлении страницы будет его заново инициализировать. Решение очень простое - нужно указать количество воркеров для работы, например, один:

php artisan octane:start --poll --workers=1


Всё. Теперь октан будет гарантированно запоминать состояние. Но есть, опять же, нюанс - если к этой команде добавить параметр --watch, то она упадёт.

Для сравнения, загрузка страницы со списком товаров из базы при старте через artisan serve и с БД в докер-контейнере, занимает у меня около 150-300 мс. Сервис, запущенный из wsl отдаёт данные за 5-7 секунд. Laravel Octane справляется за 41 мс.

Также можно дополнить блок scripts в файле composer.json:

{
"scripts": {
// ...
"post-install-cmd": [
"@roadrunner"
],
"post-update-cmd": [
"@php artisan vendor:publish --tag=laravel-assets --ansi --force",
"@php artisan vendor:publish --tag=telescope-assets --ansi --force",
"@roadrunner"
],
"octane": [
"Composer\\Config::disableProcessTimeout",
"@php artisan octane:start --poll --workers=1"
],
"roadrunner": [
"rm -f rr",
"@php vendor/bin/rr get-binary -o linux"
]
}
}


После этого, при вызовах команд composer install и composer update октан будет автоматически обновляться.

Учтите, что обновление происходит путём скачивания zip архива при помощи curl без пробрасывания авторизационного токена, установленного в Composer, поэтому чревато схватить ошибку 403 API rate limit exceeded.


И вторая команда - composer octane вместо запуска самого октана.

Всё 🙂
🔥74👍1👎1
🤖 Поддержка нескольких ботов в DefStudio Telegraph

Программный продукт Telegraph от DefStudio работает шустро и работать с ним одно удовольствие. Но не обошлось и без ложки дёгтя в этом меду - несмотря на возможность работы с несколькими ботами, обработчик для них всех будет лишь один. Благо есть лёгкий способ это исправить.

https://habr.com/ru/articles/848240/
👍8🍓2💊1
Forwarded from Kvede Новости
Состоялся релиз первой альфа-версии проекта Kvede Bot

Всё что можно было протестировать юнит-тестами и руками в тестовых группах, протестировано.

В данный момент текущий функционал @KvedeBot содержит всё что было у @LightCleanerBot с некоторыми доработками в сторону улучшений.

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

Инструкция по миграции:

1. Удаляем из группы @LightCleanerBot
2. Добавляем в группу @KvedeBot с обязательным назначением прав администратора на удаление сообщений и блокировку пользователей.
3. Всё.

Старый бот будет полностью отключен 31-го октября.
Forwarded from Kvede Новости
Проект находится в стадии альфа-тестирования

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

Для начала работы добавьте @KvedeBot в Вашу группу и назначьте администратором, выдав права на удаление сообщений и блокировку пользователей.

Тонкие настройки групп можно передать @Helldar (веб-интерфейс находится в разработке) или в чат поддержки @KvedeSupport.

Главный бот: @KvedeBot
Новостной канал: @KvedeNews
Группа поддержки: @KvedeSupport
Фид спам-блокировок: @KasFeed

Панель управления: https://kvede.com (в разработке)
Фид блокировок: https://kas.kvede.com/feed (в разработке)

Группа в ВК: https://vk.com/kvede
👍3
Forwarded from Kvede Новости
Большой апдрейт 🤩

За последние четыре дня код проекта несколько вырос начиная с полного рефакторинга тестов, что позволило полностью покрыть все стороны работы бота, сделав простым и прозрачным процесс "общения" с Telegram API.

Коротко о нововведениях:

- При классификации текста на предмет спама теперь учитывается не только имя пользователя, если оно было указано, но ещё и названия кнопок, если они были прикреплены к сообщению;
- В личные фиды блокировок были добавлены кнопки для взаимодействия с заблокированными пользователями. Доступно три кнопки: "спам", "не спам" и "избранные". Названия можно переименовывать для каждого канала;
- Добавлен новый модуль "Избранные пользователи". Он позволяет отмечать пользователей в чате, на которых не будет распространяться анти-спам проверка;
- Посты из каналов теперь не будут удаляться при анти-спам проверке;
- Сообщения длиной менее трёх символов не будут проходить классификацию спама;
- Исправлена ошибка инициализации системы, вследствие которой в ответ на вебхук для условного Ивана писалось сообщение "Руслан, Вы не можете это использовать", где имя "Руслан" могло рандомно меняться;
- Добавлен прогрев авторизационного токена Яндекса, что при деплое позволит сразу закэшировать его результат. До этого первый запрос к нему длился около 5-10 секунд, т.к. системе нужно было время для шифрования данных при подготовке запроса;
- Теперь для администраторов и "обычных" пользователей бот будет показывать разные наборы команд, в т.ч. на разных языках (пока что доступны русский и английский, но кнопки могут иметь прежний вид, т.к. функционал тестируется);
- Улучшили работу с колбэк функциями. Telegram не позволяет передавать данные длиной свыше 60 байт, вследствие чего для некоторых методов колбэки не срабатывали, т.к. совокупность идентификаторов чата, сообщений, пользователя и названия методов превышала допустимый объём. Теперь такого не будет;
- Исправлена ошибка при обработке плейсхолдера с частью отсутствующих данных;
- Исправлена ошибка определения идентификатора сообщения при вызове колбэков.

Далее в очереди новый модуль "Доверенные пользователи", переработка системы приветствий и команда проверки настроек чата 👷‍♂️

@KvedeBot | Чат поддержки: @KvedeSupport
Forwarded from Kvede Новости
@KvedeBot - Ваш надёжный помощник в борьбе со спамом

Хотите избавиться от спама в вашей группе или канале в Telegram? Тогда наш @KvedeBot может стать вашим надёжным помощником! Он автоматически удаляет спам и блокирует нежелательных участников, чтобы вы могли сосредоточиться на общении с друзьями и коллегами. Просто добавьте бота в свою группу или канал, назначьте его администратором и наслаждайтесь чистым и безопасным общением в Telegram!

Бот находится в стадии beta разработки и абсолютно бесплатен для использования.

@KvedeBot | Чат поддержки @KvedeSupport
❤‍🔥11👍1
Почему мы постим новости о каком-то @KvedeBot?

Всё просто! Этот проект - наша разработка 😎
3
Forwarded from Kvede Новости
📣 Встречайте обновление 0.16 beta!

Мы сделали наш продукт ещё лучше, чтобы управление группами и борьба со спамом были максимально эффективными.

Что нового?

- Отслеживание новых участников. Больше не упустите ни одного пользователя! 🥳
- Проверка настроек чата. Удобная команда /check всегда под рукой.
- Защита от блокировок. Спамеры больше не помешают в личных группах и избранных чатах. 🚫
- Исправление ошибок. Теперь сообщения отображаются корректно, даже если они отправлены от имени публичного канала.

И конечно же, мы внедрили несколько незаметных на первый взгляд улучшений, которые приносят большую пользу. 😎

Не упустите возможность попробовать новое обновление! Установите его прямо сейчас и убедитесь в эффективности изменений. 🚀
5
Новая версия Laravel 11.32 принесла небольшой сюрприз тем, кто проверяет факт инициализации классов через хелпер app()->resolved().

На первом скриншоте отображено поведение на версии 11.31 и ниже (верхний блок) и 11.32 (нижний блок).

На втором скриншоте отображено решение проблемы, во всяком случае для тестов.
Быстрое обновление данных в снапшот-тестировании

При изменении данных в снапшотах, официальная документация PEST рекомендует вызывать консольную команду vendor/bin/pest --update-snapshots.

Работает она достаточно просто: удаляет содержимое папки tests/.pest и запускает тесты в "обычном" режиме и принцип работы самих тестов не менее прост: если файлов нет, они будут созданы, иначе результат выполнения будет сверяться с тем, что существует в файлах.

К сожалению, параметр --update-snapshots не работает при запуске параллельного тестирования, но есть один лайфхак - нужно всего лишь удалить вышеупомянутую папку и тогда тесты будут создавать новый дамп.

Для упрощения взаимодействия можно использовать скрипты композера:

{
"scripts": {
"test:unit": [
"Composer\\Config::disableProcessTimeout",
"@php artisan test --parallel --recreate-databases --drop-databases"
],
"test:update": [
"rm -rf tests/.pest",
"@test:unit"
]
}
}


Теперь при вызове команды composer test:unit будут запущены параллельные тесты для проверки, а при вызове composer test:update будут обновлены снапшоты.

Разница в цифрах:

$ composer test:update
> rm -rf tests/.pest
> @php artisan test --parallel --recreate-databases --drop-databases

...<some>...

Tests: 517 passed (2775 assertions)
Duration: 57.83s
Parallel: 16 processes

$ php artisan --compact --update-shapshots

...<some>...

Tests: 517 passed (2775 assertions)
Duration: 223.81s


Пользуйтесь 😎
🔥1
Не знаю как так получилось, но сегодня RoadRunner приказал долго жить...

В рамках одной из задач был задеплоен код следующего содержания (упрощён):

try
{
// какое-то действие
return $result;
} catch (Throwable $e) {
return report(
fn () => new CustomException($e, $chat, $user, $module),
fn () => null
);
}


При деплое также стоял на его триггер и в консоли вывело ошибку:

PHP Fatal error:  Maximum call stack size of 8339456 bytes
(zend.max_allowed_stack_size - zend.reserved_stack_size) reached during compilation.
Try splitting expression in .../vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 1


И всё. Даже убрав этот участок кода, перезапустив RoadRunner с Laravel Octane и даже перезапустив сам веб-сервер, RR отказывается запускаться постоянно дополняя лог текстом:

worker stopped, and will be restarted
worker stopped, and will be restarted

Больше в лог ничего не пишет, но и эти надписи пишет при каждом запросе к веб-сайту.

При всём этом:
$ art octane:status

INFO Octane server is running.


Решение, пока что, не найдено.
Проблема найдена и устранена...

# .env

#
LOG_CHANNEL=stack
LOG_STACK=stack

#
LOG_CHANNEL=stack
LOG_STACK=single

Вот что значит не брать во внимание мелочи...

...и деплоить не критические изменения в час ночи...🤦🤦🤦

В дополнение, эти изменения были внесены задолго до того злосчастного деплоя. На сервере используется кэширование конфигураций и в какой-то момент почему-то подумал что так будет лучше - зашёл, обновил да и забыл... А при деплое, разумеется, и не вспомнил даже... Причину нашёл когда перебирал все логи, поднимал все выполненные за последние сутки задачи, вспоминая что делал, и только так удалось обнаружить первоисточник.
🤯6👍2
Завтра состоится релиз PHP 8.4

В нём нас ожидают:

- Хуки свойств
- Асимметричная область видимости свойств
- Атрибут #[\Deprecated]
- Новые возможности ext-dom и поддержка HTML5
- Новые функции array_*()
- SQL-парсеры, специфичные для драйверов PDO
- new MyClass()->method() без скобок

И немного ещё 🎉

https://www.php.net/releases/8.4/ru.php
🔥5
Немного не по теме, но будьте бдительны и не открывайте картинки и ссылки от незнакомых лиц!
🍌1🤝1