Документация языка 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
или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