Обновлён модуль cqCodeUtils до версии 1.6.1.
Попытка оптимизации проблемы совместимости версий JDK, вызванной javax.annotation.Resource.
Изменение способа вычисления ключа ограничителя потока.
Исправлена ошибка, из-за которой ограничитель потока не мог классифицировать ограничение по коду.
Добавлен некоторый код для реализации будущих функций.
Добавлено отслеживание событий удаления друзей: FriendDelete и соответствующая аннотация: @Listen(MsgGetTypes.friendDelete) и @OnFriendDelete.
Удалены лишние и устаревшие элементы.
Изменены правила переопределения конфигурации: теперь это порядок приоритета: параметры запуска > файл конфигурации > аннотация.
В классе конфигурации добавлены параметры запуска, связанные с запуском.
Параметры запуска используются для добавления параметров в конфигурацию с помощью --xxx.
Добавлен параметр конфигурации simbot.profiles.active (или совместимый с spring: spring.profiles.active), который позволяет загружать дополнительные файлы конфигурации. Это похоже на Spring. Например, если ваш файл конфигурации — conf.properties, и вы указали simbot.profiles.active=dev,test, то помимо текущего файла конфигурации будут загружены файлы conf-dev.properties и conf-test.properties. Последующие загруженные параметры конфигурации переопределяют исходные параметры конфигурации. Вы можете комбинировать параметры запуска --simbot.profiles.active= для достижения различных конфигураций среды, таких как порт по умолчанию 8080 в сети и порт 8877 на локальном компьютере.
Добавлены некоторые регулярные выражения для сопоставления типов ключевых слов: FIND, TRIM_FIND, RE_CQCODE_FIND, RE_CQCODE_TRIM_FIND, FIND_0, TRIM_FIND_0 и RE_CQCODE_FIND_0. В конце FIND используется регулярное выражение find(0) для сопоставления.
Все регулярные выражения, связанные с KeywordMatchType (например, REGEX, FIND и т. д.), поддерживают динамическое извлечение параметров. Синтаксис извлечения динамических параметров: {{имя[,регулярное выражение]}}, где имя — это имя извлекаемого динамического параметра, а регулярное выражение — это регулярное выражение для сопоставления. Например:
@Beans
public class Test{
/** Слушайте сообщение «номер равен (\\d+)» и извлеките \\d+ как номер параметра */
@Listen(MsgGetTypes.privateMsg)
@Filter("номер равен {{номер,\\d+}}")
public void test1(PrivateMsg msg, MsgSender sender, @FilterValue("номер") Long number){
sender.SENDER.sendPrivateMsg(msg, "Ваш номер: " + number);
}
// ...
}
Здесь @Filter по умолчанию использует регулярное выражение REGEX, поэтому можно использовать динамические параметры, а затем добавить @FilterValue («номер») Long number в метод параметра. Здесь @Filter значение «номер» является номером параметра в @Filter, а регулярное выражение сопоставления номера — \d+. А @Filter фактически становится «номер равен (\d+)». Регулярное выражение в синтаксисе извлечения можно опустить, чтобы оно стало {{имя}}, и регулярное выражение по умолчанию станет .+. Если вы хотите использовать обычную строку, используйте обратную косую черту для экранирования.
Добавлены аннотации шаблонов:
Resource совместим с аннотацией, где name и type в аннотации соответствуют value и type в @Depend.
ListenerManager предоставляет открытый метод getListenerMethods(), который можно внедрить в этот класс и использовать для получения всех экземпляров функций прослушивания, комбинируя некоторые пользовательские аннотации для создания динамических меню на основе функций прослушивания. IOUtils заменить на hutool-core:
1.13.0:
изменить механизм загрузки перехвата сообщений;
тип журнала зависимости изменить на debug;
добавить реализацию интерфейса Closeable в центр зависимостей, чтобы при выполнении close все объекты, реализующие интерфейс Closeable, были закрыты и удалены из списка одноэлементных объектов;
для ListenContext добавить статический метод getLocal(), который будет сохранять текущий контекст в ThreadLocal при срабатывании функции прослушивания и очищать его после завершения всех функций прослушивания;
добавить функцию прослушивания Intercept с использованием метода ListenIntercept и аннотации @Beans, функция возвращает true для пропуска сообщения, false — для блокировки;
создать класс ListenInterceptContext для использования в функции ListenIntercept, предоставляющий доступ к большому количеству параметров в методах ListenMethod;
в MsgSender добавить метод reply() для быстрого ответа, который проверяет тип аргумента MsgGet и генерирует исключение, если это не PrivateMsg, GroupMsg или DiscussMsg;
включить экспериментальную функцию runAuto().
1.12.1 (beta):
1.12.0 (beta):
улучшить фабрику зависимостей и устранить некоторые скрытые проблемы;
добавить два параметра в аннотацию @Beans: init() по умолчанию false и priority() по умолчанию Integer.MAX_VALUE, которые определяют, выполняется ли инициализация после создания bean-компонента и его приоритет;
ввести концепцию приоритета для @Beans. При получении bean-компонента через тип, если существует несколько экземпляров этого типа, выбирается компонент с наивысшим приоритетом (в порядке возрастания, то есть с наименьшим числовым значением). Например, для интерфейса TestInterface с двумя реализациями Test1 и Test2, где @Beans имеет приоритет 1 и 2 соответственно, при получении TestInterface будет выбран Test1;
если существует несколько компонентов с наивысшим приоритетом, будет выдано исключение. По умолчанию приоритет равен Integer.MAX_VALUE;
сделать BotInfo наследуемым от интерфейса Closeable;
создать класс PriorityConstant для определения основных констант;
изменить возвращаемое значение метода registerBot в BotManager на botInfo после успешной регистрации;
добавить конфигурацию setClassLoader в базовый класс конфигурации для настройки загрузчика классов, используемого в таких местах, как сканирование пакетов. По умолчанию используется загрузчик классов текущего потока;
заменить внутренний экземпляр BotManagerImpl по умолчанию на автоматически загружаемый модуль, имеющий самый низкий приоритет;
внедрить ConfigProperties в качестве компонента по умолчанию, который можно использовать для предоставления дополнительных настроек модулям при использовании конфигурационных файлов. Рекомендуется использовать префикс simbot для всех конфигураций;
теперь при запуске, если не зарегистрировано ни одной информации о боте, больше не будет принудительно регистрироваться адрес по умолчанию, а будет выводиться предупреждение.
добавлен метод getMethod() в SenderContext, родительский класс трёх методов отправки, для поддержки получения экземпляра текущего метода перехвата;
три метода отправки больше не будут перехватывать методы объекта по умолчанию (например, метод toString(), если только компонент не переопределил этот метод).
значительно перестроена внутренняя структура. Теперь при запуске, если нет зарегистрированной информации о ботах, не будет автоматически регистрироваться адрес по умолчанию. Вместо этого будет выдаваться предупреждение.
1.11.4:
1.11.3:
1.11.2:
1.11.1:
1.11.0:
1.10.7:
1.10.6:
1.10.5:
1.10.4:
В стартере измените соглашения, ориентированные на компоненты, разделите конфигурации «запуск компонента», «запуск службы компонента» и т. д.
Объедините опции, подобные «без запуска службы», в ядро, предоставьте параметр конфигурации core.enableServer для определения необходимости запуска компонента службы, по умолчанию — true (включить).
Благодаря изменению механизма запуска компонентов вы можете реализовать пользовательское получение сообщений и более эффективную обработку с помощью этих двух объектов. Например, вы устанавливаете конфигурацию core.enableServer = false, чтобы предотвратить запуск внутренних серверов компонентов (большинство из них недостаточно эффективны), а затем используете «преобразователь функций прослушивания строк» и «исполнитель функций прослушивания» для распределения задач через внешние сервисы (например, общие springboot + tomcat веб-сервисы или высокопроизводительные nio сервисы на основе netty).
Логика обработки прослушивателя изменяется: когда принимается сообщение от незарегистрированного бота, сообщение не обрабатывается и создаётся журнал ошибок.
Добавьте параметр ListenContext (контекст прослушивания) к интерфейсу Filterable.
Измените параметр @Filter (аннотация объекта) на класс Filter (объект данных с тем же именем).
Добавьте текст ошибки в языковой файл.
Исправьте ошибку, связанную с невозможностью связать текущий контекст прослушивания со значением текущего прослушивающего устройства.
Просто измените внутреннюю структуру ListenContext.
Изменённое внутреннее правило соответствия для параметра value @Filter теоретически немного повысит эффективность.
Создайте интерфейс HttpClientAble для реализации настраиваемых HTTP-запросов, чтобы пользователи могли отказаться от использования внутреннего HttpClientUtil. Если он не реализован, ядро предоставит реализацию по умолчанию, аналогичную исходной HttpClientUtil.
Создайте класс HttpClientHelper для использования интерфейса HttpClientAble, используя метод registerClient для регистрации.
Добавьте аннотацию @HttpTemplate для автоматической регистрации реализации класса интерфейса HttpClientAble в классе HttpClientHelper.
Настройте ограничения для родительского стартера BaseApplication для дочерних классов, реализуя разделение запуска служб и получения информации, позволяя ядру контролировать запуск служб.
Настройте метод run родительского стартера BaseApplication, чтобы он имел возвращаемое значение, и перенесите исходное значение, которое можно получить через объект экземпляра приложения, в SimpleRobotContext для получения.
Предоставьте возвращаемое значение метода run запуска как SimpleRobotContext (или его особый подкласс для компонента) и предоставьте некоторые полезные функции, такие как:
Добавьте три параметра к аннотации @Filter: String[] bot(), KeywordMatchType botMatchType() и MostType mostBotType(). Эти параметры похожи на фильтрацию по групповому номеру и номеру QQ и используются для фильтрации «текущего получателя сообщения BOT». Если полученное значение ThisCode равно null, оно будет пропущено.
Измените стратегию сопоставления аннотаций @Filter: если текущее сообщение является «носителем группового номера», но полученный групповой номер равен null, оно будет автоматически пропущено (ранее не пропускалось).
Измените стратегию сопоставления аннотаций @Filter: если текущим сообщением является «номер QQ», но полученное значение номера QQ равно null, оно будет автоматически пропущено (раньше не пропускалось).
Текущий порядок фильтрации по умолчанию: бот → группа → код → слово → пользовательский.
Измените правила сопоставления параметров аннотации @SimpleRobotApplication в пути ресурсов, если они не могут быть получены, попробуйте использовать их в качестве пути к файлу.
1.8.1
1.8.0
Примечание ①: эта версия ядра не совместима с предыдущими.
Примечание ②: функция нескольких учётных записей в настоящее время всё ещё находится в стадии тестирования. Если вы столкнётесь с ошибкой, пожалуйста, своевременно сообщите об этом.
1.7.0
Интерфейс FriendList добавляет getAllFriends().
Цвет предупреждения QQLog изменён на жёлтый.
Добавлена конфигурация, связанная с локалью, в config.
Параметр QQLogBack изменён.
Несколько типов событий прослушивания добавлены в MsgGetType (но не обязательно полезны):
Простой способ изменить правило генерации идентификатора прослушивателя.
Создан новый доступный класс SenderAPIManager, который планируется использовать для сбора всех API, существующих в отправителях, обычно используется для отладки.
Префикс «simple.robot.conf» во всех конфигурациях был изменён на «core».
Параметры инициализации пула потоков были оптимизированы, и был добавлен новый параметр пула потоков: коэффициент блокировки (blockingFactor).
Класс BaseConfiguration больше не переопределяет метод toString.
Был создан новый класс исключений RobotRunException.
Открытый интерфейс добавлен в тип прослушивания MsgGet (почти все типы прослушивания):
Функции, которые будут добавлены в будущем в версии 1.7:
1.6.3
1.6.2
Исправлена проблема невозможности чтения китайских символов в файле конфигурации.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )