August 19, 2021

Документация языка LoliCode

Вступление

Это собрание всей документации, связанной с LoliCode, которую также можно найти в официальном веб-приложении OpenBullet 2, как показано на изображении.

Обратитесь к этому разделу по любым вопросам, связанным с синтаксисом LoliCode, доступными переменными и доступным синтаксическим сахаром для директив C#.

Блоки

Синтаксис блоков в 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 base64plvB6Yer)
  • 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 или white
  • data.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