Лидеры
Популярный контент
Показан контент с высокой репутацией 08.05.2023 в Записи блога
-
7 балловВ Discord-е AP-PRO вновь появился бот! Я уже далеко не в первый раз делаю бота для AP-PRO. Первые 2 версии были сделаны для Telegram и не отличались особенным качеством по сравнению с текущим. Так же была версия для Discord-а, однако она технически устарела, из-за чего я решил переписать её, используя знания, которые я получил во время работы над языковым расширением для VSCode (подробнее тут). Время описать нововведения. Новая реализация команд Как я писал выше, я уже делал бота и он технически устарел. Ранее, для использования команд, было нужно указывать уникальный префикс и вручную писать название команды. Сейчас же команды встроены в Discord и грамотно оформлены: Префикс для всех ботов стал общим, команды хранятся в виде списка, при том, с наличием возможных аргументов и описания. То есть, если раньше о функционале бота можно было даже не догадываться, то сейчас же пропустить что-то стало затруднительно. Новый алгоритм сбора информации Начнем с того, что бот умеет собирать информацию с сайта и хранить её для отображения в Discord-е. На этом и основывались все версии бота. Он "парсит" страницу и после сохраняет в базе данных информацию с неё, для того чтобы сделать работу легче, быстрее и не добавлять лишней нагрузки сайту. Однако, с открытием мною асинхронности, это больше не является такой сильной проблемой. Для начала, достаточно сравнить скорость сбора информации обоих алгоритмов: Старый алгоритм: Новый алгоритм с асинхронностью: Самое интересное, что таких показателей со старым алгоритмом можно было добиться только при условии, что бот пропускал записи, которые уже были в базе данных, то есть, сбор только новой информации. Однако, у данного алгоритма есть проблема. Мне до конца не ясно, из-за чего это происходит, однако иногда бот просто не может получить страницу, даже спустя несколько попыток. Я предполагаю, что алгоритм работает настолько быстро, что срабатывает некоторая защита, которая мешает получить страницу. К сожалению, проверить или исправить у меня это не вышло, поэтому я просто сохраняю информацию о том, что именно не вышло получить и надеюсь решить это в будущем. Фильтры для модификаций Раньше бот выдавал игроку случайную модификацию при вызове команды "?random". Если же он хотел случайный мод на определённой платформе, то использовал команды: "?random_soc", "?random_cs" или "?random_cop". Как можно догадаться, и со стороны разработчика и со стороны пользователя это было неудобно. Однако сейчас, с появлением полноценной поддержки аргументов, можно ограничиться лишь командой "/random", где, при желании, можно указать желаемую часть игры. Однако, зачем останавливаться на этом? Я тоже спросил себя об этом, и после некоторых манипуляций с кодом добавил еще несколько фильтров, количество которых я планирую увеличить. На данный момент, можно отфильтровать моды по таким параметрам: Часть из трилогии Минимальная средняя оценка Максимальная средняя оценка Минимальное количество отзывов Максимальное количество отзывов Всё из перечисленного является опциональный. Небольшой список, однако я планирую сделать его больше, добавив: Минимальный год релиза Максимальный год релиза Наличие определённого тега у модификации Наличие отзыва у пользователя (при подключённом профиле) По сути, ничего невероятного, однако именно для этих параметров нужно произвести некоторые манипуляции кода, что будет уже в следующих обновлениях. Код, переписанный практически полностью Не столько нововведения для пользователей, сколько лично для меня. Так как я переписывал бота с нуля, я брал некоторые готовые вещи из старой версии, которые в последствии переделывал. И скажу так, код был просто ужасен. Например, код получения информации со страницы пользователя в старой версии занимал около 90 строк и выглядит он так: В новой же - 36 строк и выглядит это так: Можете сказать, что это ничего особенного. Однако это разница с учётом того, что именно происходит в данном коде. Думаю, те кто хоть немного разбираются в программировании, понимают, что один код выгляди намного лучше второго, по многим причинам: Чтобы добавить новые данные, необходимо редактировать исходный код класса, в то время как в новой версии достаточно просто добавить новый пункт в массиве. Это легче и быстрее. Убраны бессмысленное повторение кода, которое идентично для всех параметров Масштабировать функционал проще Код банально выглядит чище и легче Кончено же, до идеала тут далеко, множество вещей мне предстоит выучить и исправить, но мне приятно наблюдать за тем, как я становлюсь лучше. На этом всё. Спасибо за внимание! Надеюсь, что данную статью было интересно почитать. Если кто-то имеет рекомендации по улучшению или идеи, которые бы хотелось увидеть - пишите. А если вас заинтересовал бот и вы хотите его лично опробовать, то он доступен в Discord-е, по этой ссылке, в канале #bot-ap-pro: Ссылка