Документация языка LoliCode
Вступление
Это собрание всей документации, связанной с LoliCode, которую также можно найти в официальном веб-приложении OpenBullet 2, как показано на изображении.
Блоки
Синтаксис блоков в LoliCode
Hеобязательные элементы заключены в квадратные скобки.
BLOCK:Id [LABEL:Custom label] [DISABLED] [settingName = settingValue] [=> VAR/CAP @outputVariable] ENDBLOCK
Id: Уникальный идентификатор блокаsettingName: Уникальное имя, данное в настройках блокаsettingValue: Смотрите ниже=> VAR/CAP @outputVariable: если блок возвращает значение, вы можете определить должна ли она быть обычной переменной (VAR) или захваченной (CAP)
Настройки значений
Настройки значений могут иметь 3 типа:
- Фиксированное (
"Привет"или123) - Интерполированное (
quot;Моё имя <name>") - Переменное (
@name)
Типы с фиксированным значением
- Bool (
trueилиfalse) - Int (
123) - Float (
0.42) - String (
"hello") - Byte Array (as base64
plvB6Yer) - List of Strings (e.g.
["Один", "Два", "Три"]) - Dictionary of Strings (
{("один", "первый"), ("два", "второй"), ("три", "третий")})
Типы интерполированных значений
- String (
quot;Это моё <name>") - List of Strings (
$["один", "<secondNumber>", "три"]) - Dictionary of Strings (
${("один", "первый"), ("<secondNumber>", "второй"), ("три", "третий")})
Финальные заметки
- Существует автоматическое приведение типов, поэтому вы можете использовать переменную типа "Int" в настройке типа
String
Переменные
Полезные свойства
data.UseProxy(bool) использовать ли прокси, назначенный ботуdata.STATUS(string) текущий статус ботаdata.RAWSOURCE(byte[]) содержимое последнего полученного HTTP ответаdata.SOURCE(string) то же, что и выше, но в виде строкиdata.ERROR(string) содержит сообщение о последнем исключении, обнаруженном при использовании безопасного режима (в блоках, которые его поддерживают)data.ADDRESS(string) абсолютный URL-адрес последнего HTTP ответа (после перенаправления)data.RESPONSECODE(int) код состояния последнего HTTP ответаdata.COOKIES(Dictionary<string, string>) файлы cookie, отправленные или полученные на данный момент (Например,data.COOKIES["PHPSESSID"])data.HEADERS(Dictionary<string, string>) заголовки последнего HTTP ответа (Например,data.HEADERS["Location"])data.Objects(Dictionary<string, object>) содержит объекты с состоянием для кросс-блочного использования (они будут удалены автоматически в конце скрипта)data.MarkedForCapture(List<string>) все имена переменных, отмеченных для захвата
Строка
data.Line.Data(string) вся (неразделенная) строка данных, назначенная ботуdata.Line.Retries(int) количество раз, когда данные были отправлены повторно
Прокси
Заметка: data.Proxy имеет значение null, если прокси отключены, поэтому всегда сначала выполняйте нулевую проверку
data.Proxy.Host(string)data.Proxy.Port(int)data.Proxy.Username(string)data.Proxy.Password(string)data.Proxy.Type(ProxyType) может бытьHttp/Socks4/Socks5/Socks4a
Логгер
data.Logger.Enabled(bool) включает или отключает логирование (например, когда слишком много данных в логе)
Полезные методы
data.MarkForCapture(string varName)добавляет имя переменной вdata.MarkedForCaptureлистdata.Logger.Log(string message, string htmlColor, bool canViewAsHtml)htmlColor должно быть например,#fffилиwhitedata.Logger.Log(IEnumerable<string> enumerable, string htmlColor, bool canViewAsHtml)data.Logger.Clear()очищает лог
З.Ы
LOG
Печатает текст в лог отладчика.
Пример:
LOG "hello"
CLOG
Печатает цветной текст в лог отладчика.
Полный список цветов доступен здесь (удалите дефисы и пробелы, примените PascalCase).
Пример:
CLOG YellowGreen "hello"
JUMP
Переход к указанной точке кода. Не забывайте следить за бесконечными петлями!
Пример:
... #HERE ... JUMP #HERE
REPEAT
Повторяет что-то N раз.
Пример:
REPEAT 5 LOG "hello" END
FOREACH
Итерирует по переменной списка.
Пример:
BLOCK:ConstantList value = ["one", "two", "three"] => VAR @list ENDBLOCK FOREACH elem IN list LOG elem END
WHILE
Выполняет что-то, пока условие истинно.
Пример:
WHILE INTKEY 1 LessThan 2 ... END
IF / ELSE / ELSE IF
Выполняет что-то или что-то еще.
Пример:
IF INTKEY 5 LessThan 1 LOG "nope" ELSE IF INTKEY 5 LessThan 3 LOG "nope again" ELSE LOG "yep" END
TRY / CATCH
Что-то выполняет. В случае неудачи выполняет что-нибудь еще.
Пример:
TRY // запрос на ненадежный URL CATCH // резервный запрос на надежный URL END
LOCK
Очень полезно, если вы хотите выполнять синхронные операции с глобальными переменными.
Он гарантирует, что только 1 бот может одновременно вводить данный фрагмент кода, так что несколько ботов не могут редактировать одну и ту же глобальную переменную одновременно.
Часто используется вместе с TRY / CATCH.
Пример:
LOCK globals TRY // Try to increase globals.Count by 1 if it exists globals.Count++; CATCH // Create globals.Count if it doesn't exist globals.Count = 1; END END
ACQUIRELOCK / RELEASELOCK
Очень полезно, если вы хотите выполнять асинхронные операции с глобальными переменными.
Он гарантирует, что только 1 бот может одновременно вводить данный фрагмент кода, так что несколько ботов не могут редактировать одну и ту же глобальную переменную одновременно.
Вы ДОЛЖНЫ использовать это вместе с TRY / CATCH / FINALLY.
Пример:
ACQUIRELOCK globals TRY // Здесь выполняем асинхронную операцию CATCH throw; // Восстановить исключение FINALLY RELEASELOCK globals END
SET VAR/CAP
Устанавливает строковую переменную и, при необходимости, также отмечает ее для захвата. Введено для согласования с OB1.
Пример:
SET VAR @myString "variable" LOG myString SET CAP @myCapture "capture" LOG myCapture
TAKEONE
Берет один элемент из ресурса. Вы можете настроить ресурсы в Config Settings > Data > Resources.
Вам необходимо указать имя ресурса и имя создаваемой переменной (типа string).
Пример:
TAKEONE FROM "resourceName" => @myString LOG myString
TAKE
Берет несколько элементов из ресурса. Вы можете настроить ресурсы в Config Settings> Data> Resources.
Вам необходимо указать имя ресурса и имя создаваемой переменной (типаList<string>).
Пример:
TAKE 5 FROM "resourceName" => @myList
Статья будет обновляться по мере поступления материала от разработчика программного обеспечения
Специально для канала https://t.me/OpenBulletRussia