Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
z3nCore.dll как Leatherman для Zenno, а может и лучше
Всем привет, господа автоматизаторы!
Уже довольно давно я варюсь в мире автоматизации на Zennoposter. Мой путь начался с кубиков, но я довольно быстро переключился на C# (так быстро как смог - таков путь был задуманным изначально), ведь горизонты так открываются куда более широкие и при переходе вы ощущаете прилив могущества и силы ;D. Привело это правда к тому, что по сей день для меня многие банальные вещи проще реализовать кодом — при попытке же собрать то же самое из стандартных кирпичей получается громоздко и коряво, а о существовании других некоторых втроенных функций я вообще не подозреваю, однако не могу сказать что это плохо или мне чего -то не хватает.
И так всегда бывает, после десятой или после сотой итерации написания кода под схожие задачи, что неизбежно приходит мысль: «Я не хочу набирать это еще раз!» В такие моменты обычно и пилиться универсальный метод, который можно вызывать из любого проекта и помещается в сниппет, общий код или DLL. В моем случае методов накопилось столько, что общий код начал трещать по швам, и я решил собрать все всё в одну библиотеку.
Этой библиотекой и является САБЖ этой статьи. В статье описание публичных классов, наглядные примеры использования, сама .dll текущей версии и базовый шаблон-оркестратор
Код не является конечным, библиотека активно дорабатывается и модернизируеся.
Код является открытым - актуальную версию и исходники вы всегда можете найти в репозитории https://github.com/w3bgr3p/z3nCore
Код предоставляется «как есть» и может содержать ошибки. Автор не несет ответсвенности за последствия использования в ваших шаблонах
В статье нет ответа на вопрос "зачем нужно изобретать новые велосипеды?" - интересующиеся сиим могут смело переходить к поискам ответа в следующей работе
Essentials
Базовая коллекция утилитарных классов. Включает функционал безопасности, центральный инициализатор сессий, логгер. Как должно быть очевидно из названия, содержит необходимые для работы всего остального классы
Класс Init
Описание
Класс инициализатор. Работает как фабрика для инициализации всех компонентов проекта: получает список аккаунтов для работы, настраивает браузер, запускает основной скрипт проекта, подключает социальные сети и кошельки если требуется
Описание: Выполняет полную инициализацию проекта - подготавливает базу данных, создает список аккаунтов для работы и настраивает все необходимые компоненты.
Параметры:
author - имя автора скрипта для отображения в лого
customQueries - дополнительные SQL-запросы для выборки аккаунтов
log - включить подробное логирование
Пример:
C#:
string[] queries = { "SELECT id FROM accounts WHERE status = 'active'" }; init.InitProject("myusername", queries, true);
PrepareProject()
Описание: Подготавливает проект к выполнению - выбирает аккаунт для работы, проверяет фильтры (блокчейн, социальные сети)
Описание: Запускает основной скрипт проекта с передачей всех необходимых переменных.
Параметры:
additionalVars - дополнительные переменные для передачи в скрипт
add - добавить к стандартным переменным (true) или заменить их (false)
Пример:
C#:
var extraVars = new List { "customVariable", "mySpecialSetting" }; bool success = init.RunProject(extraVars, true); if (success) { } else { project.SendErrorToLog("Проект завершился с ошибкой", false);
}
AES
Предоставляет методы для шифрования и расшифровки текста с использованием алгоритма AES, а также создания MD5-хешей.
EncryptAES Возвращает: string - зашифрованная строка в HEX-формате
Шифрует текст с использованием алгоритма AES. По умолчанию ключ автоматически хешируется через MD5 для обеспечения правильной длины.
Параметры:
phrase (string) - текст для шифрования
key (string) - ключ для шифрования
hashKey (bool) - если true, ключ будет хеширован через MD5 (по умолчанию true)
Пример использования:
C#:
string text = "Мой секретный текст";
string password = "mypassword123";
//шифруем текст с автоматическим хешированием ключа
string encrypted = AES.EncryptAES(text, password); project.SendInfoToLog($"Зашифрованный текст: {encrypted}");
//шифруем с готовым 32-символьным ключом без хеширования
string hexKey = "1234567890abcdef1234567890abcdef"; string encrypted2 = AES.EncryptAES(text, hexKey, false);
DecryptAES Возвращает: string - расшифрованный текст
Расшифровывает текст, зашифрованный методом EncryptAES. Важно использовать тот же ключ и настройку hashKey, что и при шифровании.
Параметры:
hash (string) - зашифрованная строка в HEX-формате
key (string) - ключ для расшифровки
hashKey (bool) - если true, ключ будет хеширован через MD5 (по умолчанию true)
Пример использования:
C#:
string encryptedText = "A1B2C3D4..."; //зашифрованный текст
string password = "mypassword123";
//расшифровываем с тем же ключом
string decrypted = AES.DecryptAES(encryptedText, password); project.SendInfoToLog($"Расшифрованный текст: {decrypted}");
//если шифровали без хеширования ключа, то и расшифровывать нужно так же
string hexKey = "1234567890abcdef1234567890abcdef"; string decrypted2 = AES.DecryptAES(encryptedText, hexKey, false);
HashMD5 Возвращает: string - MD5-хеш в HEX-формате
Создает MD5-хеш от переданной строки. Полезно для создания фиксированных ключей для AES-шифрования или проверки целостности данных.
Параметры:
phrase (string) - строка для хеширования
Пример использования:
C#:
string password = "mypassword123";
//получаем MD5-хеш пароля
string hash = AES.HashMD5(password); project.SendInfoToLog($"MD5 хеш: {hash}");
//можно использовать как ключ для AES без дополнительного хеширования
string text = "секретные данные";
string encrypted = AES.EncryptAES(text, hash, false);
SAFU (Simple Authentication and Functional Utilities) //и кто бы мог подумать что это будет расшифровано как аббревиатура XD
SAFU - интерфейс с подтягиванием дефолтного класса для шифрования на основе аппаратных даннных с использованием AES-шифрования.
Публичные методы Initialize Возвращаемое значение: void
Описание: Инициализирует систему SAFU, регистрируя функции шифрования в глобальном хранилище. Метод автоматически определяет доступные реализации и использует базовую версию SimpleSAFU по умолчанию.
Параметры:
project (IZennoPosterProjectModel) - экземпляр проекта ZennoPoster
Пример использования:
C#:
//инициализация SAFU перед использованием
SAFU.Initialize(project);
Encode Возвращаемое значение: string
Описание: Шифрует переданную строку с использованием PIN-кода из переменной проекта cfgPin. Если PIN-код не задан, возвращает исходную строку без изменений.
Параметры:
project (IZennoPosterProjectModel) - экземпляр проекта ZennoPoster
toEncrypt (string) - строка для шифрования
log (bool, необязательный) - флаг логирования (по умолчанию false)
Описание: Расшифровывает переданную строку с использованием PIN-кода из переменной проекта cfgPin. Если PIN-код не задан, возвращает исходную строку. В случае ошибки расшифровки отправляет предупреждение в лог.
Параметры:
project (IZennoPosterProjectModel) - экземпляр проекта ZennoPoster
toDecrypt (string) - строка для расшифровки
log (bool, необязательный) - флаг логирования (по умолчанию false)
Описание: Генерирует аппаратный пароль на основе серийного номера материнской платы и значения переменной acc0. Используется для создания уникального ключа, привязанного к конкретному компьютеру.
Параметры:
project (IZennoPosterProjectModel) - экземпляр проекта ZennoPoster
log (bool, необязательный) - флаг логирования (по умолчанию false)
Logger
Класс для удобного логирования с расширенными возможностями форматирования, цветовой разметки. Позволяет настраивать отображение дополнительной информации (аккаунт, время выполнения, использование памяти) и автоматически определять цвет сообщений по содержимому.
Конструкторы Logger(IZennoPosterProjectModel project, bool log = false, string classEmoji = null)
Создает новый экземпляр логгера с базовыми настройками.
Параметры:
project - проект ZennoPoster для отправки логов
log - принудительно включить логирование (по умолчанию false)
classEmoji - эмодзи для отображения перед каждым сообщением
Пример:
C#:
// создание базового логгера
var logger = new Logger(project);
// логгер с включенным отображением и эмодзи
var logger = new Logger(project, true, "");
var logger = new Logger(project, true);
// обычное сообщение
logger.Send("Операция выполнена успешно");
// предупреждение (автоматически оранжевым цветом)
logger.Send("!W Внимание: низкий баланс");
// ошибка с исключением
logger.Send("!E Критическая ошибка", thr0w: true);
// принудительное отображение
logger.Send("Важная информация", show: true);
Time - Утилиты работы со временем
Класс для работы со временем. Предоставляет методы для получения текущего времени, расчета времени выполнения, установки таймаутов и задержек.
Статические методы Now Возвращает: string
Получает текущее время в указанном формате.
Параметры:
format (string, по умолчанию "unix") - формат времени: "unix", "iso", "short", "utcToId"
Пример:
C#:
//получить время в unix формате
string unixTime = Time.Now(); project.SendInfoToLog($"Unix время: {unixTime}");
//получить время в ISO формате
string isoTime = Time.Now("iso"); project.SendInfoToLog($"ISO время: {isoTime}");
Cd Возвращает: string
Рассчитывает время до конца дня или добавляет указанное время к текущему моменту.
Параметры:
input (object, по умолчанию null) - количество минут для добавления или строка времени, null для конца дня
o (string, по умолчанию "iso") - формат вывода: "unix" или "iso"
Пример:
C#:
//время до конца дня
string endOfDay = Time.Cd(); project.SendInfoToLog($"До конца дня: {endOfDay}");
//добавить 30 минут к текущему времени
string futureTime = Time.Cd(30, "unix"); project.SendInfoToLog($"Через 30 минут: {futureTime}");
Методы-расширения для IZennoPosterProjectModel TimeElapsed Возвращает: int
Вычисляет количество секунд, прошедших с момента начала сессии.
Параметры:
varName (string, по умолчанию "varSessionId") - имя переменной с временем начала сессии
Пример:
C#:
//узнать сколько секунд прошло с начала сессии
int elapsed = project.TimeElapsed(); project.SendInfoToLog($"Прошло секунд: {elapsed}");
Age Возвращает: T
Получает возраст сессии в указанном типе данных.
Пример:
C#:
//получить возраст сессии как строку
string ageString = project.Age();
project.SendInfoToLog($"Возраст сессии: {ageString}");
//получить возраст как TimeSpan
TimeSpan ageTimeSpan = project.Age();
project.SendInfoToLog($"Часов работы: {ageTimeSpan.Hours}");
TimeOut
Проверяет, не превышен ли глобальный таймаут выполнения. Выбрасывает исключение при превышении.
Параметры:
min (int, по умолчанию 0) - лимит времени в минутах, если 0 - берется из переменной "timeOut"
Пример:
C#:
//проверить таймаут в 60 минут
project.TimeOut(60);
//проверить таймаут из переменной timeOut
project.TimeOut();
Deadline
Устанавливает дедлайн или проверяет его превышение.
Параметры:
sec (int, по умолчанию 0) - лимит времени в секундах, если 0 - устанавливает начальное время
Пример:
C#:
//установить начальное время для дедлайна
project.Deadline();
//проверить дедлайн в 300 секунд
project.Deadline(300);
Sleep
Приостанавливает выполнение на указанное время.
Параметры:
min (int, по умолчанию 0) - минимальное время задержки в секундах
max (int, по умолчанию 0) - максимальное время задержки в секундах, если 0 - используется значение из "cfgDelay"
Пример:
C#:
//задержка из настройки cfgDelay
project.Sleep();
//случайная задержка от 5 до 10 секунд
project.Sleep(5, 10);
StartSession
Обновляет переменную с инормацией о старте сессии "varSessionId".
Пример:
C#:
//начать новую сессию
project.StartSession();
Browser
Классы для работы с браузером. Надстройки над базовыми экшенами для работы с HtmlElement c информативными исключениями. Методы для работы с расширениями, капчёй, куками, трафиком. Проверка скора через BrowserScan с выдачей проблем и автоподстройкой времени.
BrowserScan
Класс для работы с сервисом BrowserScan.net. Позволяет анализировать отпечаток браузера, получать оценку анонимности, парсить характеристики браузера и автоматически исправлять настройки временной зоны
Конструкторы
BrowserScan(IZennoPosterProjectModel project, Instance instance, bool log = false)
Создает новый экземпляр класса BrowserScan.
Параметры:
project - модель проекта ZennoPoster
instance - экземпляр браузера
log - включить логирование (по умолчанию false)
Пример:
C#:
var browserScan = new BrowserScan(project, instance, true); //создать объект для работы с BrowserScan с включенным логированием
Методы
ParseStats()
Возвращаемое значение: void
Загружает страницу BrowserScan.net, парсит все характеристики браузера (WebGL, аудио, шрифты, часовой пояс и др.) и сохраняет их в таблицу базы данных.
Пример:
C#:
browserScan.ParseStats(); //проанализировать и сохранить все характеристики браузера
GetScore()
Возвращаемое значение: string
Получает оценку анонимности браузера от BrowserScan.net. Если оценка не 100%, дополнительно возвращает список проблем с их описанием.
Автоматически исправляет настройки временной зоны браузера на основе данных, полученных от BrowserScan.net. Устанавливает корректный часовой пояс и смещение времени.
public static bool CapGuru(this IZennoPosterProjectModel project)
Возвращаемое значение: bool - результат выполнения плагина Cap.Guru (true - успешно, false - ошибка)
Описание: Запускает плагин Cap.Guru для решения различных типов captcha hCapha. Для всего остального конечно же есть CapMonster. Автоматически использует API ключ из базы данных проекта.
Пример использования:
C#:
//использовать Cap.Guru для решения captcha
bool result = project.CapGuru();
if (result) { } else { project.SendErrorToLog("Ошибка при решении captcha через Cap.Guru");
}
Класс ChromeExt
Описание
Инструменты для управления расширениями Chromium . Позволяют устанавливать расширения из CRX-файлов, переключать их состояние (включать или отключать), удалять расширения и получать версию установленного расширения. Класс работает как утилита для автоматизации взаимодействия с браузерными расширениями, упрощая настройку профиля браузера.
Класс Cookies
Описание
Позволяет получать, устанавливать и сохранять cookies для текущего домена или всех доменов, а также управлять cookies через JavaScript. Класс упрощает автоматизацию задач, связанных с сохранением и загрузкой cookies, включая взаимодействие с файлами и базами данных.
Описание: Создает экземпляр класса для управления cookies с указанным проектом, экземпляром браузера и опцией логирования.
Параметры:
project - модель проекта ZennoPoster
instance - экземпляр браузера
log - включить/выключить логирование (по умолчанию false)
Пример:
C#:
var cookies = new Cookies(project, instance, true);
Публичные методы
Get(string domainFilter = "")
Возвращает: string - JSON-строка с данными cookies
Описание: Получает cookies для указанного домена или всех доменов и возвращает их в формате JSON. Если домен не указан, возвращаются cookies для текущего активного домена.
Параметры:
domainFilter - фильтр домена (по умолчанию пустая строка, возвращает cookies для текущего домена)
Класс InstanceExtensions
Статический класс расширений для работы с экземплярами браузера в ZennoPoster. Предоставляет удобные методы для поиска, взаимодействия с элементами веб-страниц, выполнения JavaScript-кода и работы с защитой Cloudflare. Все методы позволяют автоматизировать типичные задачи браузерной автоматизации с упрощенным синтаксисом.
Публичные методы
GetHe(object obj, string method = "")
Возвращает: HtmlElement - найденный HTML-элемент
Описание: Универсальный поиск HTML-элементов на странице. Поддерживает поиск по различным критериям: готовый HtmlElement, кортежи с id/name или полные атрибуты. Принимает те форматы объектьов которые может сгененрировать зеннопостер из штатных селекторов путем конвертации кирпича в код
Параметры:
obj - объект для поиска (HtmlElement, кортеж с id/name или полный кортеж атрибутов)
method - дополнительный метод поиска ("last" для последнего элемента)
Пример:
C#:
// Поиск по id
var element = instance.GetHe(("submitButton", "id"));
// Поиск по атрибуту
var button = instance.GetHe(("button", "innertext", "Continue", "regexp", 0));
Описание: Устанавливает значение в поле ввода с ожиданием появления элемента.
Параметры:
obj - объект для поиска элемента
value - значение для установки
method - метод поиска элемента
deadline - время ожидания в секундах
delay - задержка перед вводом в секундах
comment - комментарий для ошибок
thr0w - бросать исключение при неудаче
Пример:
C#:
// Ввод в поле email
instance.HeSet(("email", "name"), "[EMAIL]user@example.com[/EMAIL]", delay: 1);
// Ввод в поле по атрибуту
instance.HeSet(("input", "placeholder", "Введите имя", "exact", 0), "Иван Петров");
JsClick(string selector, int delay = 2)
Возвращает: string - результат выполнения ("Click successful" или ошибка)
Описание: Выполняет клик по элементу через JavaScript с использованием селектора.
Параметры:
selector - JavaScript-селектор элемента
delay - задержка перед кликом в секундах
Пример:
C#:
// Клик через querySelector
string result = instance.JsClick("document.querySelector('.submit-button')", delay: 1); project.SendInfoToLog($"Результат JS клика: {result}", false);
// Клик по элементу по ID
string result2 = instance.JsClick("document.getElementById('confirmBtn')");
JsSet(string selector, string value, int delay = 2)
Возвращает: string - результат выполнения ("Value set successfully" или ошибка)
Описание: Устанавливает значение в поле через JavaScript с использованием селектора.
Параметры:
selector - JavaScript-селектор элемента
value - значение для установки
delay - задержка перед установкой в секундах
Пример:
C#:
// Установка значения через querySelector
string result = instance.JsSet("document.querySelector('input[name="username"]')", "myuser"); project.SendInfoToLog($"Результат JS установки: {result}", false);
// Установка в скрытое поле
string result2 = instance.JsSet("document.getElementById('hiddenField')", "secretValue");
Go(string url, bool strict = false)
Описание: Переходит на указанный URL только если текущая страница отличается.
Параметры:
url - URL для перехода
strict - строгое сравнение URL (точное совпадение) иначе проверяет подстроку в url
Пример:
C#:
// Переход если страница отличается
instance.Go("[URL]https://example.com/login[/URL]");
// Строгая проверка URL
instance.Go("[URL]https://example.com/dashboard[/URL]", strict: true);
F5()
Описание: Обновляет текущую страницу (аналог F5).
Пример:
C#:
instance.F5();
CtrlV(string ToPaste)
Описание: Вставляет текст через буфер обмена (эмуляция Ctrl+V).
Параметры:
ToPaste - текст для вставки
Пример:
C#:
// Вставка текста
instance.CtrlV("Текст для вставки");
// Вставка пароля
instance.CtrlV("mySecretPassword123");
ClearShit(string domain)
Описание: закрывает все вкладки и очищает кэш и куки для указанного домена.
Параметры:
domain - домен для очистки
Пример:
C#:
// Полная очистка для домена
instance.ClearShit("example.com");
CloseExtraTabs(bool blank = false, int tabToKeep = 1)
Описание: Закрывает все вкладки с конца пока колличество не станет указанным.
Параметры:
blank - перейти на пустую страницу после закрытия
tabToKeep - колличество для сохранения (начиная с 1)
Пример:
C#:
// Закрыть лишние вкладки
instance.CloseExtraTabs(blank: true);
// Оставить две вкладки
instance.CloseExtraTabs(tabToKeep: 2);
Traffic - Класс для работы с сетевым трафиком
Класс Traffic предназначен для мониторинга и анализа HTTP-трафика . позволяет отслеживать запросы на активной вкладке, извлекать данные из них и получать конкретные параметры запросов/ответов. Особенно полезен для работы с API, перехвата токенов авторизации и анализа сетевых взаимодействий.
Конструкторы
Traffic(IZennoPosterProjectModel project, Instance instance, bool log = false)
Создает новый экземпляр класса для мониторинга трафика.
Параметры:
project - экземпляр проекта ZennoPoster
instance - экземпляр браузера
log - включить логирование процесса (по умолчанию false)
Пример:
C#:
//создать экземпляр для работы с трафиком
var traffic = new Traffic(project, instance, true);
Методы
string Get(string url, string parametr, bool reload = false, bool parse = false, int deadline = 15, int delay = 3)
Возвращаемое значение: string - значение указанного параметра из трафика
Извлекает конкретный параметр из HTTP-запроса, содержащего указанный URL. Ожидает появления запроса и возвращает данные когда находит совпадение.
Возвращает все доступные параметры HTTP-запроса в виде словаря. Содержит Method, ResultCode, Url, ResponseContentType, RequestHeaders, RequestCookies, RequestBody, ResponseHeaders, ResponseCookies, ResponseBody.
Параметры:
url - часть URL для поиска в трафике
reload - перезагрузить страницу перед мониторингом (по умолчанию false)
deadline - максимальное время ожидания в секундах (по умолчанию 10)
Пример:
C#:
//получить все данные о запросе
var requestData = traffic.Get("api/users");
//использовать данные запроса
string method = requestData["Method"]; string statusCode = requestData["ResultCode"]; string responseBody = requestData["ResponseBody"];
string GetParam(string url, string parametr, bool reload = false, int deadline = 10)
Возвращаемое значение: string - значение указанного параметра
Альтернативный метод для получения конкретного параметра из HTTP-запроса. Работает аналогично первому методу Get, но с упрощенными параметрами.
Параметры:
url - часть URL для поиска в трафике
parametr - параметр для извлечения
reload - перезагрузить страницу перед мониторингом (по умолчанию false)
deadline - максимальное время ожидания в секундах (по умолчанию 10)
Пример:
C#:
//получить код ответа
string statusCode = traffic.GetParam("api/login", "ResultCode");
//получить тело запроса
string requestBody = traffic.GetParam("api/submit", "RequestBody");
Api
Методы для простого взаимодействия с некоторыми популярными (не факт что для вашей ниши) API. Состав Aiio, Perplexity, FirstMail, Dmail, GasZip, Galxe, GitHub, Okx, Binance, UnlockProtocol
Класс AI
Описание
Класс AI предназначен для интеграции с различными сервисами искусственного интеллекта. Он позволяет отправлять запросы к AI-сервисам (Perplexity, AI.IO) и получать текстовые ответы. Класс поддерживает различные предустановленные функции для генерации твитов, оптимизации кода и создания обращений в службу поддержки Google.
Возвращает: string - текст обращения в службу поддержки Google (до 200 символов)
Описание: Генерирует обращение в службу поддержки Google для разблокировки аккаунта. Имитирует стиль обычного пользователя с небольшими грамматическими ошибками.
Параметры:
log - включить логирование
Пример:
C#:
string appealMessage = ai.GoogleAppeal(); project.SendInfoToLog($"Обращение в Google: {appealMessage}", false);
//отправить сообщение в форму поддержки
BinanceApi
Класс для работы с API биржи Binance в ZennoPoster. Позволяет выводить средства, получать информацию о балансах и истории выводов. Автоматически обрабатывает авторизацию и подпись запросов.
Конструкторы
BinanceApi(IZennoPosterProjectModel project, bool log = false)
Создает новый экземпляр класса для работы с Binance API.
Параметры:
project - модель проекта ZennoPoster
log - включить ли логирование (по умолчанию false)
Пример:
C#:
var binanceApi = new BinanceApi(project, log: true); //создать экземпляр с включенным логированием
Методы
string Withdraw(string coin, string network, string address, string amount)
Возвращает: Ответ сервера в виде JSON строки
Выполняет вывод криптовалюты на указанный адрес через выбранную сеть.
Параметры:
coin - символ монеты (например, "USDT")
network - название сети (например, "ethereum", "bsc", "arbitrum")
address - адрес кошелька для вывода
amount - сумма вывода
Пример:
C#:
string result = binanceApi.Withdraw("USDT", "ethereum", "0x742d35Cc6565C42c3928...", "100"); project.SendInfoToLog($"Результат вывода: {result}");
Dictionary<string, string> GetUserAsset()
Возвращает: Словарь с балансами всех активов (ключ - символ монеты, значение - доступный баланс)
Получает информацию о всех балансах пользователя.
Пример:
C#:
var balances = binanceApi.GetUserAsset(); foreach(var balance in balances) { project.SendInfoToLog($"{balance.Key}: {balance.Value}"); //вывести баланс каждой монеты
}
string GetUserAsset(string coin)
Возвращает: Доступный баланс указанной монеты в виде строки
List GetWithdrawHistory()
Возвращает: Список строк с историей выводов в формате "id:amount:coin:status"
Получает полную историю всех выводов.
Пример:
C#:
var history = binanceApi.GetWithdrawHistory(); foreach(string withdrawal in history) { project.SendInfoToLog($"Вывод: {withdrawal}");
//показать каждую транзакцию
}
string GetWithdrawHistory(string searchId = "")
Возвращает: Информацию о конкретной транзакции или "NoIdFound: {searchId}"
Поиск конкретной транзакции вывода по ID.
Параметры:
searchId - ID транзакции для поиска (необязательный)
DMail
Класс для работы с почтовым сервисом DMail. Позволяет авторизоваться в системе, получать список писем, читать сообщения, отмечать их как прочитанные или перемещать в корзину.
Конструкторы
DMail(IZennoPosterProjectModel project, string key = null, bool log = false)
Создает новый экземпляр класса DMail.
Параметры:
project - проект ZennoPoster
key - приватный ключ кошелька (необязательно, может быть получен из базы данных проекта)
log - включить логирование (по умолчанию false)
Пример:
C#:
//создать экземпляр без логирования
var dmail = new DMail(project);
//создать экземпляр с логированием и указанным ключом
var dmail = new DMail(project, "your_private_key", true);
Публичные методы
CheckAuth() : void
Проверяет и устанавливает авторизацию в системе DMail. Автоматически пытается получить данные авторизации из переменных проекта "encstring" и "pid" или выполнить повторную авторизацию c помощью приватного ключа из ДБ
Возвращаемое значение: нет
Описание: Проверяет наличие токенов авторизации и при необходимости выполняет процедуру входа в систему.
Пример:
C#:
var dmail = new DMail(project); //проверить авторизацию
dmail.CheckAuth();
GetAll() : dynamic
Получает список всех писем из папки "Входящие".
Возвращаемое значение: динамический объект с массивом писем
Описание: Загружает первые 20 писем из папки входящих сообщений.
Пример:
C#:
var dmail = new DMail(project); //получить все письма
dynamic allMails = dmail.GetAll(); project.SendInfoToLog($"Получено писем: {allMails.Count}");
ReadMsg(int index = 0, dynamic mail = null, bool markAsRead = true, bool trash = true) : Dictionary<string, string>
Читает конкретное письмо по индексу.
Возвращаемое значение: словарь с данными письма (отправитель, дата, тема, содержимое, идентификаторы)
Описание: Извлекает содержимое письма и опционально отмечает его как прочитанное или перемещает в корзину.
Параметры:
index - индекс письма в списке (по умолчанию 0)
mail - объект с письмами (если не указан, использует последний загруженный список)
markAsRead - отметить как прочитанное (по умолчанию true)
trash - переместить в корзину (по умолчанию true)
Пример:
C#:
var dmail = new DMail(project); dmail.GetAll(); //прочитать первое письмо без удаления
var message = dmail.ReadMsg(0, markAsRead: true, trash: false); project.SendInfoToLog($"От: {message["sender"]}, Тема: {message["subj"]}");
GetUnread(bool parse = false, string key = null) : string
Получает информацию о непрочитанных сообщениях.
Возвращаемое значение: JSON-строка с информацией или конкретное значение, если указан ключ
Описание: Возвращает статистику непрочитанных писем и использования почтового ящика.
Параметры:
parse - парсировать ответ (по умолчанию false)
key - конкретный ключ для извлечения ("mail_unread_count", "message_unread_count", "not_read_count", "used_total_size")
Пример:
C#:
var dmail = new DMail(project); //получить количество непрочитанных писем
string unreadCount = dmail.GetUnread(key: "mail_unread_count"); project.SendInfoToLog($"Непрочитанных писем: {unreadCount}");
//получить полную информацию
string fullInfo = dmail.GetUnread(); project.SendInfoToLog($"Полная статистика: {fullInfo}");
Trash(int index = 0, string dm_scid = null, string dm_smid = null) : void
Перемещает письмо в корзину.
Возвращаемое значение: нет
Описание: Перемещает указанное письмо из папки "Входящие" в корзину.
Параметры:
index - индекс письма (по умолчанию 0)
dm_scid - идентификатор беседы (если не указан, получает автоматически)
dm_smid - идентификатор сообщения (если не указан, получает автоматически)
Пример:
C#:
var dmail = new DMail(project); dmail.GetAll(); //переместить первое письмо в корзину
dmail.Trash(0);
MarkAsRead(int index = 0, string dm_scid = null, string dm_smid = null) : void
Отмечает письмо как прочитанное.
Возвращаемое значение: нет
Описание: Изменяет статус письма на "прочитано" без перемещения в корзину.
Параметры:
index - индекс письма (по умолчанию 0)
dm_scid - идентификатор беседы (если не указан, получает автоматически)
dm_smid - идентификатор сообщения (если не указан, получает автоматически)
Пример:
C#:
var dmail = new DMail(project); dmail.GetAll(); //отметить первое письмо как прочитанное
dmail.MarkAsRead(0);
FirstMail
Класс для работы с API сервиса временной почты FirstMail. Позволяет получать письма, извлекать из них коды подтверждения и ссылки.
Конструкторы
FirstMail(IZennoPosterProjectModel project, bool log = false)
Создает новый экземпляр класса FirstMail.
Параметры:
project (IZennoPosterProjectModel) - проект ZennoPoster
log (bool) - включить логирование (по умолчанию false)
Пример:
C#:
// создать экземпляр без логирования
var firstMail = new FirstMail(project);
// создать экземпляр с логированием
var firstMail = new FirstMail(project, true);
Методы
GetMail(string email)
Получает последнее письмо для указанного email адреса и загружает его в JSON объект проекта.
Возвращает: string - JSON ответ от API
Параметры:
email (string) - email адрес для получения писем
Пример:
C#:
// получить последнее письмо
string jsonResponse = firstMail.GetMail("[EMAIL]user@example.com[/EMAIL]");
// данные письма теперь доступны через project.Json
string subject = project.Json.subject; // тема письма
string text = project.Json.text; // текст письма
GetOTP(string email)
Извлекает 6-значный код подтверждения из последнего письма. Ищет код в теме, тексте и HTML содержимом письма.
Возвращает: string - найденный 6-значный код
Параметры:
email (string) - email адрес для поиска кода
Пример:
C#:
try { // получить код подтверждения
string otpCode = firstMail.GetOTP("[EMAIL]user@example.com[/EMAIL]"); project.SendInfoToLog($"Получен код: {otpCode}");
} catch (Exception ex) { project.SendErrorToLog($"Ошибка получения кода: {ex.Message}");
}
GetLink(string email)
Извлекает первую найденную ссылку (http/https) из текста последнего письма.
Возвращает: string - найденная ссылка
Параметры:
email (string) - email адрес для поиска ссылки
Пример:
C#:
try { // получить ссылку из письма
string link = firstMail.GetLink("[EMAIL]user@example.com[/EMAIL]"); project.SendInfoToLog($"Найдена ссылка: {link}");
// можно использовать ссылку для перехода
tab.Navigate(link); } catch (Exception ex) { project.SendErrorToLog($"Ссылка не найдена: {ex.Message}");
}
Delete(string email, bool seen = false)
Удаляет письма для указанного email адреса.
Возвращает: string - JSON ответ от API
Параметры:
email (string) - email адрес
seen (bool) - удалить только прочитанные письма (по умолчанию false)
Пример:
C#:
// удалить все письма
string result = firstMail.Delete("[EMAIL]user@example.com[/EMAIL]");
// удалить только прочитанные письма
string result = firstMail.Delete("[EMAIL]user@example.com[/EMAIL]", true);
GetOne(string email)
Получает одно последнее письмо для указанного email адреса.
Возвращает: string - JSON ответ от API
Параметры:
email (string) - email адрес
Пример:
C#:
// получить одно письмо
string message = firstMail.GetOne("[EMAIL]user@example.com[/EMAIL]"); project.Json.FromString(message);
GetAll(string email)
Получает все письма для указанного email адреса.
Возвращает: string - JSON ответ от API с массивом писем
Параметры:
email (string) - email адрес
Пример:
C#:
// получить все письма
string allMessages = firstMail.GetAll("[EMAIL]user@example.com[/EMAIL]"); project.Json.FromString(allMessages);
// обработать каждое письмо в цикле
for (int i = 0; i < project.Json.messages.Count; i++) { string subject = project.Json.messages[i].subject; project.SendInfoToLog($"Письмо {i}: {subject}");
}
Galxe
Класс для работы с платформой Galxe. Позволяет парсить задания на странице, получать информацию о пользователе и лояльные очки через GraphQL API.
Конструкторы
Galxe(IZennoPosterProjectModel project, Instance instance, bool log = false)
Создает новый экземпляр класса Galxe.
Параметры:
project (IZennoPosterProjectModel) - проект ZennoPoster
instance (Instance) - экземпляр браузера
log (bool) - включить логирование (по умолчанию false)
Пример:
C#:
// создать экземпляр для работы с Galxe
var galxe = new Galxe(project, instance);
// создать экземпляр с логированием
var galxe = new Galxe(project, instance, true);
Методы
ParseTasks(string type = "tasksUnComplete", bool log = false)
Парсит задания на текущей странице Galxe и возвращает список элементов в зависимости от типа.
Возвращает: List<HtmlElement> - список найденных элементов заданий
Параметры:
type (string) - тип заданий для возврата: "tasksComplete", "tasksUnComplete", "reqComplete", "reqUnComplete", "refComplete", "refUnComplete" (по умолчанию "tasksUnComplete")
log (bool) - включить логирование (по умолчанию false)
Пример:
C#:
// получить невыполненные задания
var uncompletedTasks = galxe.ParseTasks("tasksUnComplete"); project.SendInfoToLog($"Найдено невыполненных заданий: {uncompletedTasks.Count}");
// получить выполненные требования
var completedRequirements = galxe.ParseTasks("reqComplete");
// пройти по всем невыполненным заданиям
foreach (var task in uncompletedTasks) { project.SendInfoToLog($"Задание: {task.InnerText}");
// кликнуть по заданию
task.Click(); }
BasicUserInfo(string token, string address)
Получает базовую информацию о пользователе через GraphQL API Galxe.
Возвращает: string - JSON ответ с информацией о пользователе или null при ошибке
Параметры:
token (string) - токен авторизации
address (string) - адрес кошелька пользователя
Пример:
C#:
string userToken = "Bearer your_token_here"; string walletAddress = "0x1234567890abcdef...";
// получить информацию о пользователе
string userInfo = galxe.BasicUserInfo(userToken, walletAddress);
if (userInfo != null) { project.Json.FromString(userInfo);
// извлечь данные пользователя
string username = project.Json.data.addressInfo.username; string userLevel = project.Json.data.addressInfo.userLevel.level.name; int experience = project.Json.data.addressInfo.userLevel.exp;
project.SendInfoToLog($"Пользователь: {username}, Уровень: {userLevel}, Опыт: {experience}");
} else { project.SendErrorToLog("Не удалось получить информацию о пользователе");
}
GetLoyaltyPoints(string alias, string address)
Получает информацию о лояльных очках пользователя в конкретном пространстве Galxe.
Возвращает: string - JSON ответ с информацией об очках лояльности или null при ошибке
Параметры:
alias (string) - псевдоним (алиас) пространства в Galxe
address (string) - адрес кошелька пользователя
Пример:
C#:
string spaceAlias = "example-space"; string walletAddress = "0x1234567890abcdef...";
// получить очки лояльности
string loyaltyInfo = galxe.GetLoyaltyPoints(spaceAlias, walletAddress);
if (loyaltyInfo != null) { project.Json.FromString(loyaltyInfo);
// извлечь данные об очках
int points = project.Json.data.space.addressLoyaltyPoints.points; int rank = project.Json.data.space.addressLoyaltyPoints.rank;
project.SendInfoToLog($"Очки лояльности: {points}, Ранг: {rank}");
} else { project.SendErrorToLog("Не удалось получить очки лояльности");
}
GazZip
Класс для выполнения операций межсетевого перевода токенов (рефьюел) через протокол GasZip. Позволяет автоматически находить подходящую сеть с достаточным балансом и выполнять переводы в указанную целевую сеть.
Конструкторы
GazZip(IZennoPosterProjectModel project, string key = null, bool log = false)
Создает новый экземпляр класса GazZip для работы с межсетевыми переводами.
Параметры:
project - проект ZennoPoster для работы с логами и переменными
key - ключ для операций (опционально)
log - включить подробное логирование операций
Пример:
C#:
// создать экземпляр с логированием
var gazZip = new GazZip(project, log: true);
// создать экземпляр без логирования
var gazZip = new GazZip(project);
Методы
Refuel(string chainTo, decimal value, string rpc = null, bool log = false)
Возвращает: string - хеш транзакции или сообщение об ошибке
Выполняет межсетевой перевод указанной суммы ETH в целевую сеть через протокол GasZip.
Параметры:
chainTo - целевая сеть (поддерживает: "sepolia", "soneum", "bsc", "gravity", "zero", "opbnb" или hex-адрес)
value - сумма для перевода в ETH
rpc - RPC эндпоинт исходной сети (если не указан, автоматически выбирается подходящая)
log - включить детальное логирование процесса
Пример:
C#:
var gazZip = new GazZip(project, log: true);
// автоматический выбор исходной сети
string txHash = gazZip.Refuel("sepolia", 0.001m); project.SendInfoToLog($"Транзакция: {txHash}");
// использование конкретной исходной сети
string rpcUrl = "[URL]https://rpc.ankr.com/eth[/URL]"; string result = gazZip.Refuel("bsc", 0.005m, rpcUrl, true);
if (result.StartsWith("fail:")) { project.SendErrorToLog($"Ошибка: {result}");
} else { project.SendInfoToLog($"Успешно: {result}");
}
GitHubApi
Класс для работы с GitHub API, позволяющий управлять репозиториями, коллабораторами и их правами доступа. Предоставляет простые методы для создания репозиториев, изменения их видимости, добавления и удаления участников проекта.
Конструкторы
GitHubApi(string token, string username)
Создает новый экземпляр для работы с GitHub API.
Параметры:
token - токен доступа к GitHub API
username - имя пользователя GitHub
Пример:
C#:
//создать подключение к GitHub API
var github = new GitHubApi("your_token_here", "your_username");
Методы
GetRepositoryInfo(string repoName)
Возвращает: string - информация о репозитории в формате JSON или сообщение об ошибке
Получает подробную информацию о указанном репозитории.
Параметры:
repoName - название репозитория
Пример:
C#:
//получить информацию о репозитории
string repoInfo = github.GetRepositoryInfo("my-project"); project.SendInfoToLog(repoInfo);
GetCollaborators(string repoName)
Возвращает: string - список коллабораторов в формате JSON или сообщение об ошибке
Получает список всех участников репозитория.
Параметры:
repoName - название репозитория
Пример:
C#:
//получить список участников репозитория
string collaborators = github.GetCollaborators("my-project"); project.SendInfoToLog(collaborators);
CreateRepository(string repoName)
Возвращает: string - данные созданного репозитория в формате JSON или сообщение об ошибке
Создает новый приватный репозиторий.
Параметры:
repoName - название нового репозитория
Пример:
C#:
//создать новый приватный репозиторий
string result = github.CreateRepository("new-project"); project.SendInfoToLog("Репозиторий создан: " + result);
ChangeVisibility(string repoName, bool makePrivate)
Возвращает: string - результат операции в формате JSON или сообщение об ошибке
AddCollaborator(string repoName, string collaboratorUsername, string permission = "pull")
Возвращает: string - результат операции в формате JSON или сообщение об ошибке
Добавляет нового участника в репозиторий с указанными правами.
Параметры:
repoName - название репозитория
collaboratorUsername - имя пользователя нового участника
permission - права доступа: "pull", "push", "admin", "maintain", "triage" (по умолчанию "pull")
Пример:
C#:
//добавить участника с правами на запись
string result = github.AddCollaborator("my-project", "developer123", "push"); project.SendInfoToLog("Участник добавлен: " + result);
RemoveCollaborator(string repoName, string collaboratorUsername)
Возвращает: string - результат операции или сообщение об ошибке
Удаляет участника из репозитория.
Параметры:
repoName - название репозитория
collaboratorUsername - имя пользователя для удаления
Пример:
C#:
//удалить участника из репозитория
string result = github.RemoveCollaborator("my-project", "old-developer"); project.SendInfoToLog("Участник удален: " + result);
ChangeCollaboratorPermission(string repoName, string collaboratorUsername, string permission = "pull")
Возвращает: string - результат операции или сообщение об ошибке
Изменяет права доступа существующего участника репозитория.
Параметры:
repoName - название репозитория
collaboratorUsername - имя пользователя
permission - новые права: "pull", "push", "admin", "maintain", "triage" (по умолчанию "pull")
Пример:
C#:
//изменить права участника на администраторские
string result = github.ChangeCollaboratorPermission("my-project", "developer123", "admin"); project.SendInfoToLog("Права изменены: " + result);
OkxApi
Класс для работы с OKX API, предоставляющий функциональность для управления криптовалютными счетами, субсчетами, выводом средств и получением рыночных данных.
Конструктор
OkxApi(IZennoPosterProjectModel project, bool log = false)
Создает новый экземпляр OkxApi для работы с биржей OKX.
Параметры:
project - экземпляр проекта ZennoPoster
log - включить ли логирование (по умолчанию false)
C#:
// Создание экземпляра OkxApi
var okx = new OkxApi(project, log: true);
Методы
OKXGetSubAccs(string proxy = null, bool log = false)
Возвращает: List<string> - список имен субсчетов
Получает список всех субсчетов на основном аккаунте OKX.
Параметры:
proxy - прокси для запроса (необязательно)
log - включить логирование (по умолчанию false)
C#:
// Получить список всех субсчетов
var subAccounts = okx.OKXGetSubAccs(); foreach (string subName in subAccounts) { project.SendInfoToLog($"Найден субсчет: {subName}");
}
OKXGetSubMax(string accName, string proxy = null, bool log = false)
Возвращает: List<string> - список в формате "валюта:максимальная_сумма_вывода"
Получает максимальные суммы для вывода с торгового счета указанного субаккаунта.
Параметры:
accName - имя субаккаунта
proxy - прокси для запроса (необязательно)
log - включить логирование (по умолчанию false)
C#:
// Получить максимальные суммы для вывода с торгового счета
var maxWithdrawals = okx.OKXGetSubMax("sub1"); foreach (string balance in maxWithdrawals) { project.SendInfoToLog($"Доступно для вывода: {balance}");
}
OKXGetSubTrading(string accName, string proxy = null, bool log = false)
Возвращает: List<string> - список торговых балансов
Получает торговые балансы указанного субаккаунта.
Параметры:
accName - имя субаккаунта
proxy - прокси для запроса (необязательно)
log - включить логирование (по умолчанию false)
C#:
// Получить торговые балансы субсчета
var tradingBalances = okx.OKXGetSubTrading("sub1");
OKXGetSubFunding(string accName, string proxy = null, bool log = false)
Возвращает: List<string> - список в формате "валюта:доступный_баланс"
Получает балансы фандинг-счета указанного субаккаунта.
Параметры:
accName - имя субаккаунта
proxy - прокси для запроса (необязательно)
log - включить логирование (по умолчанию false)
C#:
// Получить балансы фандинг-счета
var fundingBalances = okx.OKXGetSubFunding("sub1"); foreach (string balance in fundingBalances) { string[] parts = balance.Split(':'); project.SendInfoToLog($"Валюта: {parts[0]}, Баланс: {parts[1]}");
}
OKXGetSubsBal(string proxy = null, bool log = false)
Возвращает: List<string> - список в формате "субсчет:валюта:баланс"
Получает все ненулевые балансы со всех субсчетов (как с фандинг, так и с торговых счетов).
Параметры:
proxy - прокси для запроса (необязательно)
log - включить логирование (по умолчанию false)
C#:
// Получить все балансы со всех субсчетов
var allBalances = okx.OKXGetSubsBal(log: true); foreach (string balance in allBalances) { project.SendInfoToLog($"Баланс: {balance}");
}
// Создать новый субаккаунт
okx.OKXCreateSub("myNewSubAccount");
OKXDrainSubs()
Возвращает: void
Переводит все доступные средства со всех субсчетов на основной счет.
C#:
// Собрать все средства с субсчетов на основной счет
okx.OKXDrainSubs();
OKXAddMaxSubs()
Возвращает: void
Создает максимально возможное количество субсчетов до достижения лимита.
C#:
// Создать максимальное количество субсчетов
okx.OKXAddMaxSubs();
OKXPrice(string pair, string proxy = null, bool log = false)
Возвращает: T - цена в указанном типе данных
Получает текущую рыночную цену торговой пары.
Параметры:
pair - торговая пара (например, "BTC-USDT")
proxy - прокси для запроса (необязательно)
log - включить логирование (по умолчанию false)
C#:
// Получить цену BTC в USDT как decimal
decimal btcPrice = okx.OKXPrice("BTC-USDT"); project.SendInfoToLog($"Цена BTC: {btcPrice} USDT");
// Получить цену как строку
string priceString = okx.OKXPrice("ETH-USDT");
UnlockApi
Класс для работы с Unlock Protocol смарт-контрактами в блокчейне Optimism. Позволяет получать информацию о владельцах NFT-ключей и времени истечения их действия.
Конструкторы
UnlockApi(IZennoPosterProjectModel project, bool log = false)
Создает новый экземпляр UnlockApi для работы с Unlock Protocol.
Параметры:
project - ссылка на проект ZennoPoster для логирования
log - включить дополнительное логирование (по умолчанию false)
Пример:
C#:
//создать экземпляр UnlockApi
var unlockApi = new UnlockApi(project, true);
Методы
string keyExpirationTimestampFor(string addressTo, int tokenId, bool decode = true)
Возвращает: string - временную метку истечения ключа
Получает временную метку истечения действия NFT-ключа по его ID.
Параметры:
addressTo - адрес смарт-контракта Unlock
tokenId - ID токена (ключа)
decode - декодировать результат в читаемый формат (по умолчанию true)
Пример:
C#:
//получить время истечения ключа с ID 1
string expiration = unlockApi.keyExpirationTimestampFor("0x1234567890abcdef", 1); project.SendInfoToLog($"Ключ истекает: {expiration}");
string ownerOf(string addressTo, int tokenId, bool decode = true)
Возвращает: string - адрес владельца ключа
Получает адрес владельца NFT-ключа по его ID.
Параметры:
addressTo - адрес смарт-контракта Unlock
tokenId - ID токена (ключа)
decode - декодировать результат в читаемый формат (по умолчанию true)
Пример:
C#:
//получить владельца ключа с ID 1
string owner = unlockApi.ownerOf("0x1234567890abcdef", 1); project.SendInfoToLog($"Владелец ключа: {owner}");
string Decode(string toDecode, string function)
Возвращает: string - декодированное значение
Декодирует результат вызова функции смарт-контракта из HEX формата в читаемый вид.
Параметры:
toDecode - HEX строка для декодирования
function - имя функции для определения типа декодирования
Пример:
C#:
//декодировать HEX результат
string result = unlockApi.Decode("0x000000000000000000000000a1b2c3d4e5f6", "ownerOf"); project.SendInfoToLog($"Декодированный результат: {result}");
Dictionary<string, string> Holders(string contract)
Возвращает: Dictionary<string, string> - словарь где ключ это адрес владельца, значение - время истечения
Получает всех держателей NFT-ключей контракта и время истечения их ключей.
Параметры:
contract - адрес смарт-контракта Unlock
Пример:
C#:
//получить всех держателей ключей
var holders = unlockApi.Holders("0x1234567890abcdef"); foreach(var holder in holders) { //вывести информацию о каждом держателе
project.SendInfoToLog($"Владелец: {holder.Key}, истекает: {holder.Value}");
}
ProjectExtensions
Набор расширений для project . Методы для расширения Exсpetions с подробной трассирповкой исключений, упрощенные методы для работы с FileSystem, методы для формирования отчетов (успешных и не очень), в логи, БД, телеграмм и даже скриншот, методы для получения вских рандомов - от ожидания из настроек до рандомного инвайта из диапазона в БД, методы для упрощенной работы с переменными проекта локальтными и глобальными, и пачка других утилит не попавших под категоризацию
TracedException
Специализированный класс исключения, который автоматически собирает информацию о месте возникновения ошибки и вызывающем методе для упрощения отладки.
Конструкторы TracedException(Exception, string)
Создает новое исключение с трассировкой на основе исходного исключения.
Параметры:
innerException (Exception) - Исходное исключение, которое нужно обернуть
caller (string, необязательный) - Имя вызывающего метода
C#:
try { // какой-то код, который может выдать ошибку
var result = SomeMethod(); } catch (Exception ex) { //создать трассируемое исключение
var tracedException = new TracedException(ex, "MyMethod"); throw tracedException; }
ExceptionExtensions
Набор методов расширения для работы с исключениями, позволяющий легко логировать и выбрасывать ошибки с трассировкой.
Методы Throw(Exception, IZennoPosterProjectModel, string, bool)
Возвращаемое значение: string - Сообщение об ошибке
Обрабатывает исключение: логирует его и либо выбрасывает, либо возвращает сообщение об ошибке.
Параметры:
ex (Exception) - Исключение для обработки
project (IZennoPosterProjectModel) - Объект проекта для логирования
caller (string, необязательный) - Имя вызывающего метода (заполняется автоматически)
throwEx (bool, по умолчанию true) - Выбрасывать ли исключение после логирования
C#:
try { // код, который может выдать ошибку
DoSomething(); } catch (Exception ex) { //логировать и выбросить исключение
ex.Throw(project); }
//или только залогировать без выброса исключения
try { DoSomething(); } catch (Exception ex) { //получить сообщение об ошибке без выброса исключения
string errorMessage = ex.Throw(project, throwEx: false); project.SendInfoToLog("Ошибка обработана: " + errorMessage);
}
Обрабатывает существующее исключение, логирует его с информацией о последнем действии и выбрасывает трассируемую версию.
Параметры:
project (IZennoPosterProjectModel) - Объект проекта
ex (Exception) - Исключение для обработки
caller (string, необязательный) - Имя вызывающего метода (заполняется автоматически)
C#:
try { // код, который может выдать ошибку
DoSomething(); } catch (Exception ex) { //обработать и выбросить с логированием контекста проекта
project.Throw(ex); }
Класс FS
Упрощенные методы для управления файлами и директориями
Конструкторы FS(IZennoPosterProjectModel project, bool log = false)
Создает новый экземпляр класса FS.
Параметры:
project - экземпляр проекта ZennoPoster
log - включить логирование (по умолчанию false)
Пример использования:
C#:
// создание экземпляра без логирования
var fs = new FS(project);
// создание экземпляра с включенным логированием
var fs = new FS(project, true);
Методы void RmRf(string path)
Рекурсивно удаляет директорию со всем содержимым.
Параметры:
path - путь к удаляемой директории
Пример использования:
C#:
var fs = new FS(project); //удалить директорию с файлами
fs.RmRf(@"C:\temp\folder");
void CopyDir(string sourceDir, string destDir)
Копирует директорию со всем содержимым в указанное место.
Параметры:
sourceDir - путь к исходной директории
destDir - путь к целевой директории
Пример использования:
C#:
var fs = new FS(project); //скопировать папку с файлами
fs.CopyDir(@"C:\source", @"C:\destination");
string GetRandomFile(string directoryPath) Возвращает: случайный файл из указанной директории или null, если файлы не найдены
Получает случайный файл из директории, включая подпапки.
Параметры:
directoryPath - путь к директории для поиска файлов
Пример использования:
C#:
//получить случайный файл из папки
string randomFile = FS.GetRandomFile(@"C:\images"); if (randomFile != null) { project.SendInfoToLog("Выбран файл: " + randomFile);
}
string GetNewCreds(string dataType) Возвращает: строку с учетными данными или null при ошибке
Получает новые учетные данные из файла fresh и перемещает их в файл used.
Параметры:
dataType - тип данных для получения (имя файла без расширения)
Пример использования:
C#:
var fs = new FS(project, true); //получить новый аккаунт из $"{_project.Path}.data\fresh\{dataType}.txt"
string account = fs.GetNewCreds("twitter"); if (account != null) { project.SendInfoToLog("Получен аккаунт: " + account);
} else { project.SendWarningToLog("Аккаунты закончились");
}
Reporter
Класс для создания отчётов об ошибках и успешных операциях . Позволяет создавать отчёты в различных форматах и отправлять уведомления в Telegram.
Конструкторы Reporter(IZennoPosterProjectModel project, Instance instance, bool log = false, string classEmoji = null)
Создаёт новый экземпляр класса Reporter для работы с отчётами.
Параметры:
project - объект проекта ZennoPoster
instance - экземпляр браузера
log - флаг включения логирования (по умолчанию false)
classEmoji - эмодзи для класса (по умолчанию null)
C#:
//создание объекта Reporter
var reporter = new Reporter(project, instance);
//создание с дополнительными параметрами
var reporter = new Reporter(project, instance, true, "");
RndInt(this IZennoPosterProjectModel project, string Var) Возвращаемое значение: int
Описание: Получает случайное целое число из переменной проекта (поддерживает диапазон через дефис)
Параметры:
Var (string) - имя переменной проекта
C#:
// Переменная содержит "5-15"
int randomInt = project.RndInt("myIntRange"); project.SendInfoToLog($"Random integer: {randomInt}");
RndBool(this int truePercent) Возвращаемое значение: bool
Описание: Возвращает случайное булево значение с заданной вероятностью true в процентах
Параметры:
truePercent (int) - вероятность получить true в процентах (0-100)
C#:
bool result = 75.RndBool(); // 75% вероятность получить true
project.SendInfoToLog($"Random bool: {result}");
Utils
Статический класс с вспомогательными методами
Методы L0g
Отправляет сообщение в лог проекта. (Короткая статическая обертка для логгера)
Параметры:
toLog (string) - сообщение для записи в лог
callerName (string, опционально) - имя вызывающего метода (заполняется автоматически)
show (bool, по умолчанию true) - показывать ли сообщение в интерфейсе
thr0w (bool, по умолчанию false) - выбрасывать ли исключение
toZp (bool, по умолчанию true) - отправлять ли в ZennoPoster
Пример использования:
C#:
//отправить простое сообщение в лог
project.L0g("Операция выполнена успешно");
//отправить сообщение без отображения в интерфейсе
project.L0g("Отладочное сообщение", show: false);
Range
Обрабатывает диапазон аккаунтов и устанавливает соответствующие переменные проекта.
Возвращает: int - конечное значение диапазона
Параметры:
accRange (string, опционально) - строка диапазона, если не указана, берется из переменной cfgAccRange
output (string, опционально) - не используется в текущей реализации
log (bool, по умолчанию false) - выводить ли информацию в лог
Пример использования:
C#:
//обработать диапазон из переменной проекта
int maxRange = project.Range();
//обработать конкретный диапазон
int maxRange = project.Range("1-10");
//обработать список аккаунтов
int maxRange = project.Range("1,5,8,12");
Clean
Очищает ресурсы браузера и профиля после завершения работы.
Параметры:
instance (Instance) - экземпляр браузера для очистки
Finish
Завершает работу с аккаунтом, сохраняет данные и отправляет уведомления.
Параметры:
instance (Instance) - экземпляр браузера
Пример использования:
C#:
//корректно завершить работу с аккаунтом
project.Finish(instance);
ObsoleteCode
Выводит предупреждение об использовании устаревшего кода со стеком
Параметры:
newName (string, по умолчанию "unknown") - рекомендуемый новый метод
Пример использования:
C#:
//предупредить об устаревшем коде
project.ObsoleteCode("NewMethod.DoSomething");
RunZp
Выполняет другой проект ZennoPoster с передачей переменных.
Возвращает: bool - результат выполнения проекта
Параметры:
vars (List, опционально) - список имен переменных для передачи
Пример использования:
C#:
//выполнить проект без передачи переменных
bool result = project.RunZp();
//выполнить проект с передачей переменных
var varsToPass = new List { "var1", "var2", "login" }; bool result = project.RunZp(varsToPass);
Vars - Работа с переменными проекта
Утилиты для упрощения работы с переменными
Методы Var(string Var) Возвращает: string
Получает значение переменной проекта по имени. Если переменная не существует, возвращает пустую строку.
Устанавливает значение переменной проекта. Возвращает пустую строку.
Параметры:
var - имя переменной
value - значение для установки
Пример использования:
C#:
//установить значение переменной
project.Var("userLogin", "myusername123"); project.Var("userAge", 25);
VarRnd(string Var) Возвращает: string
Обрабатывает переменную как диапазон (формат "мин-макс") и возвращает случайное число из этого диапазона. Если переменная не содержит диапазон, возвращает её значение без изменений.
Параметры:
Var - имя переменной
Пример использования:
C#:
//если переменная delay содержит "5-10", получим случайное число от 5 до 10
string randomDelay = project.VarRnd("delay"); project.SendInfoToLog($"Случайная задержка: {randomDelay} секунд");
VarCounter(string varName, int input) Возвращает: int
Увеличивает числовое значение переменной на указанное число и возвращает новое значение.
Параметры:
varName - имя переменной-счётчика
input - число для добавления (может быть отрицательным)
Пример использования:
C#:
//увеличить счётчик попыток на 1
int attempts = project.VarCounter("loginAttempts", +1); project.SendInfoToLog($"Попытка входа номер: {attempts}");
project.VarCounter("loginAttemptsLeft", -1);
Выполняет математические операции между двумя переменными. Поддерживает операции: +, -, *, /
Параметры:
varA - имя первой переменной
operation - математическая операция ("+", "-", "*", "/")
varB - имя второй переменной
varRslt - имя переменной для сохранения результата (необязательно)
Пример использования:
C#:
//сложить значения двух переменных и сохранить результат
decimal sum = project.VarsMath("price", "+", "tax", "totalPrice"); project.SendInfoToLog($"Общая сумма: {sum}");
Constantas - Константы и настройки проекта
Методы для получения системных констант и настроек проекта.
Методы ProjectName() Возвращает: string
Получает имя текущего проекта из пути к файлу скрипта и сохраняет в переменную "projectName".
Пример использования:
C#:
string name = project.ProjectName(); project.SendInfoToLog($"Имя проекта: {name}");
ProjectTable() Возвращает: string
Генерирует имя таблицы для проекта в формате "__ИмяПроекта" и сохраняет в переменную "projectTable".
GVars - Глобальные переменные
Утилиты для работы с глобальными переменными и управления потоками выполнения.
Методы GVar(string var) Возвращает: string
Получает значение глобальной переменной. Имя переменной автоматически формируется как "_ИмяПроекта_ИмяПеременной". Идентичная Var функция для глобальных пеерменных
Привязывает текущий поток к аккаунту через глобальные переменные. Возвращает true при успешной привязке.
Параметры:
input - значение для привязки (по умолчанию имя проекта)
force - принудительная привязка даже если аккаунт занят (по умолчанию false)
log - выводить информацию в лог (по умолчанию false)
Пример использования:
C#:
//попробовать привязать аккаунт
if (project.GSetAcc("MyBot_v1.0", false, true)) { } else { project.SendWarningToLog("Не удалось привязать аккаунт");
}
GClean(bool log = false) Возвращает: List<int>
Очищает все глобальные переменные аккаунтов (от acc1 до rangeEnd). Возвращает список номеров очищенных аккаунтов.
Параметры:
log - выводить информацию в лог (по умолчанию false)
Пример использования:
C#:
//очистить все привязки аккаунтов
var cleanedAccounts = project.GClean(true); project.SendInfoToLog($"Очищено {cleanedAccounts.Count} аккаунтов");
OtherExtensions
Методы расширений для разных объектов (В текущей реализации тут только строки)
StringExtensions - Методы расширения для работы со строками
Статический класс с методами расширения для строк, предоставляющий удобные функции для работы с криптографией, блокчейн-данными, парсингом и другими распространенными операциями. EscapeMarkdown Возвращаемое значение: string - строка с экранированными символами разметки Markdown
Экранирует специальные символы Markdown в строке, добавляя перед ними обратный слэш.
Параметры:
text (string) - исходная строка для экранирования
Пример использования:
C#:
string text = "Текст с [I]жирным[/I] и [I]курсивом[/I]";
string escaped = text.EscapeMarkdown(); project.SendInfoToLog(escaped); // Текст с *жирным* и _курсивом_
GetTxHash Возвращаемое значение: string - хеш транзакции из ссылки
Извлекает хеш транзакции из URL-ссылки, беря последнюю часть после слэша.
ParseCreds Возвращаемое значение: Dictionary<string, string> - словарь с разобранными данными
Разбирает строку с данными по заданному формату с разделителями.
Параметры:
data (string) - строка данных для разбора
format (string) - формат с названиями полей в фигурных скобках
devider (char, по умолчанию: ':') - символ-разделитель
Пример использования:
C#:
string data = "admin:password123:[EMAIL]user@email.com[/EMAIL]"; string format = "{login}:{password}:{email}"; var parsed = data.ParseCreds(format, ':'); project.SendInfoToLog($"Логин: {parsed["login"]}, Email: {parsed["email"]}");
ParseByMask Возвращаемое значение: Dictionary<string, string> - словарь с извлеченными значениями
Извлекает значения из строки по заданной маске с переменными в фигурных скобках.
Параметры:
input (string) - исходная строка для парсинга
mask (string) - маска с переменными в фигурных скобках
Пример использования:
C#:
string text = "Пользователь John имеет баланс 100.50";
string mask = "Пользователь {name} имеет баланс {balance}";
var result = text.ParseByMask(mask); project.SendInfoToLog($"Имя: {result["name"]}, Баланс: {result["balance"]}");
StringToHex Возвращаемое значение: string - число в hex формате с префиксом 0x
Преобразует строковое число в hex формат с возможностью конвертации единиц измерения.
Параметры:
value (string) - числовое значение в виде строки
convert (string, по умолчанию: "") - тип конвертации: "gwei", "eth" или пустая строка
Requests
Набор методов HTTP-запросов через Net.Http, а так же методов-надстроек над штатным http клиентом позволяюшие работать с запросами с минимальным количеством кода с автопарсингом json обработкой исключений и разными приятными плюшками.
NetHttp
Класс для выполнения HTTP запросов через Net.Http с поддержкой прокси, кастомных заголовков и автоматического логирования. Предоставляет удобный интерфейс для работы с веб-сервисами и API.
Конструктор
NetHttp(IZennoPosterProjectModel project, bool log = false)
Создает новый экземпляр класса NetHttp.
Параметры:
project - экземпляр проекта ZennoPoster
log - включить логирование запросов (по умолчанию false)
Пример:
C#:
var httpClient = new NetHttp(project, true); //создать клиент с логированием
Методы
GET(string url, string proxyString = "", Dictionary<string, string> headers = null, bool parse = false, int deadline = 15, bool throwOnFail = false)
Возвращает: string - ответ сервера
Выполняет GET запрос к указанному URL.
Параметры:
url - адрес для запроса
proxyString - строка прокси (формат: "ip:port" или "user:pass@ip:port")
headers - дополнительные HTTP заголовки
parse - автоматически парсить JSON ответ
deadline - таймаут запроса в секундах
throwOnFail - выбрасывать исключение при ошибке
Пример:
C#:
var headers = new Dictionary<string, string> { {"Authorization", "Bearer token123"} }; string response = httpClient.GET("[URL]https://api.example.com/data[/URL]", "+", headers, true); //получить данные с авторизацией и парсингом JSON
project.SendInfoToLog(response);
Выполняет DELETE запрос для удаления данных на сервере.
Параметры:
url - адрес для запроса
proxyString - строка прокси
headers - дополнительные HTTP заголовки
callerName - имя вызывающего метода для логирования
Пример:
C#:
string response = httpClient.DELETE("[URL]https://api.example.com/delete/1[/URL]", "+"); //удалить запись с id=1
project.SendInfoToLog("Удалено: " + response);
CheckProxy(string proxyString = null)
Возвращает: bool - true если прокси работает корректно
Проверяет работоспособность прокси, сравнивая IP адреса с прокси и без него.
Параметры:
proxyString - строка прокси для проверки (если null, берется из базы данных)
Пример:
C#:
bool isProxyWorking = httpClient.CheckProxy("192.168.1.1:8080"); if (isProxyWorking) { } else { project.SendWarningToLog("Прокси не работает");
}
ProxySet(Instance instance, string proxyString = null)
Возвращает: bool - true если прокси успешно установлен
Проверяет и устанавливает прокси для экземпляра браузера.
Параметры:
instance - экземпляр браузера для установки прокси
proxyString - строка прокси (если null, берется из базы данных)
Пример:
C#:
bool proxySet = httpClient.ProxySet(instance, "user:pass@192.168.1.1:8080"); if (proxySet) { } else { project.SendErrorToLog("Не удалось установить прокси");
}
Requests
Расширения для выполнения HTTP-запросов в ZennoPoster с поддержкой прокси, логирования и автоматической обработки JSON. Предоставляет удобные методы GET и POST с настраиваемыми параметрами и обработкой ошибок.
Методы
GET
Возвращает: string - ответ сервера или пустую строку при ошибке
Выполняет HTTP GET-запрос к указанному URL с возможностью настройки прокси, заголовков и таймаута.
Параметры:
url (string) - URL для запроса
proxy (string, необязательный) - прокси в формате "ip:port" или "login:pass@ip:port", символ "+" для автоматического получения из переменных
Устанавливает прокси для экземпляра браузера с проверкой корректности работы. Проверяет изменение IP-адреса для подтверждения работы прокси.
Параметры:
instance (Instance) - экземпляр браузера для настройки прокси
proxyString (string, необязательный) - строка прокси, если не указана - берется автоматически
Пример использования:
C#:
//установка прокси для текущего экземпляра
project.SetProxy(instance);
//установка конкретного прокси
project.SetProxy(instance, "192.168.1.1:8080");
//установка прокси с авторизацией
project.SetProxy(instance, "user:pass@192.168.1.1:8080");
Socials
Коллекция классов для управления аккаунтами Discord, GitHub, Google, Twitter/X и Guild.xyz. Авторизация, аутентификация, парсинг данных, специфичные методы для работы с социалками.
Discord
Класс для автоматизации работы с Discord в ZennoPoster. Предоставляет методы для загрузки учетных данных из базы данных, авторизации в Discord и получения списка серверов.
Конструкторы
Discord(IZennoPosterProjectModel project, Instance instance, bool log = false)
Создает новый экземпляр класса Discord.
Параметры:
project - экземпляр проекта ZennoPoster
instance - экземпляр браузера
log - включить логирование (по умолчанию false)
Пример:
C#:
var discord = new Discord(project, instance, true); //создать экземпляр Discord с включенным логированием
Методы
CredsFromDb()
Возвращает: string - статус аккаунта Discord
Загружает данные Discord аккаунта из базы данных и сохраняет их в переменные проекта.
Пример:
C#:
string status = discord.CredsFromDb(); //загрузить данные аккаунта из БД
project.SendInfoToLog($"Статус аккаунта: {status}");
Отправляет сообщение в лог проекта с префиксом Discord.
Параметры:
tolog - текст сообщения для лога
callerName - имя вызывающего метода (заполняется автоматически)
log - принудительно показать лог даже если отключен
Пример:
C#:
discord.Log("Начинаем авторизацию", log: true);
//отправить сообщение в лог с принудительным показом
DSload(bool log = false)
Возвращает: string - результат загрузки (статус или имя пользователя)
Выполняет полную процедуру авторизации в Discord: загружает страницу, пытается авторизоваться по токену, при неудаче выполняет вход по логину/паролю.
Параметры:
log - включить дополнительное логирование
Пример:
C#:
string result = discord.DSload(true); //авторизоваться в Discord
if (result == "ok" || result.Contains("@")) { }
DSservers()
Возвращает: string - список серверов через запятую
Получает список всех серверов Discord, к которым подключен текущий аккаунт, включая серверы в папках.
Пример:
C#:
string servers = discord.DSservers(); //получить список серверов
project.SendInfoToLog($"Серверы: {servers}");
GitHub
Класс для автоматизации работы с GitHub аккаунтами, включая авторизацию, двухфакторную аутентификацию и управление паролями.
Конструкторы
GitHub(IZennoPosterProjectModel project, Instance instance, bool log = false)
Создает новый экземпляр класса GitHub с автоматической загрузкой учетных данных.
Параметры:
project - экземпляр проекта ZennoPoster
instance - экземпляр браузера
log - включить логирование (по умолчанию false)
Пример:
C#:
var github = new GitHub(project, instance, true);
Методы
void LoadCreds()
Загружает учетные данные GitHub из базы данных и сохраняет их в переменные проекта.
Пример:
C#:
github.LoadCreds();
void InputCreds()
Вводит учетные данные на странице входа GitHub и обрабатывает двухфакторную аутентификацию.
Пример:
C#:
github.InputCreds();
void Go()
Переходит на страницу входа GitHub и принимает cookies если необходимо.
Пример:
C#:
github.Go();
void Verify2fa()
Выполняет верификацию двухфакторной аутентификации с использованием OTP кода.
Пример:
C#:
github.Verify2fa();
string Load()
Возвращает: имя текущего пользователя GitHub
Выполняет полный процесс входа в аккаунт GitHub с проверкой корректности авторизации и сохранением cookies.
void ChangePass(string password = null)
Изменяет пароль аккаунта GitHub через функцию восстановления пароля с использованием email.
Параметры:
password - новый пароль (не используется в текущей реализации)
Пример:
C#:
github.ChangePass();
void SaveCookies()
Сохраняет текущие cookies браузера в базу данных для последующего использования.
Пример:
C#:
github.SaveCookies();
Google
Класс для автоматизации работы с аккаунтами Google. Загружает данные аккаунта из базы данных, выполняет авторизацию с обходом различных проверок безопасности и сохраняет куки для последующего использования.
Конструкторы
Google(IZennoPosterProjectModel project, Instance instance, bool log = false)
Создает новый экземпляр класса для работы с Google аккаунтом.
Параметры:
project - текущий проект ZennoPoster
instance - экземпляр браузера для работы
log - включить подробное логирование (по умолчанию false)
Пример:
C#:
//создание экземпляра для работы с Google
Google google = new Google(project, instance, log: true);
Публичные методы
string Load(bool log = false, bool cookieBackup = true)
Выполняет полную авторизацию в аккаунте Google с автоматическим прохождением всех проверок.
Возвращает: Строка со статусом авторизации ("ok" при успехе)
Параметры:
log - включить логирование процесса (по умолчанию false)
cookieBackup - сохранить куки после успешной авторизации (по умолчанию true)
Пример:
C#:
//авторизация в Google аккаунте
string result = google.Load(log: true, cookieBackup: true); if (result == "ok") { } else { project.SendErrorToLog($"Ошибка авторизации: {result}");
}
string State(bool log = false)
Определяет текущее состояние страницы авторизации Google.
Возвращает: Строка с текущим состоянием (например: "ok", "inputLogin", "inputPassword", "inputOtp")
Параметры:
log - включить логирование (по умолчанию false)
Пример:
C#:
//проверка текущего состояния
string currentState = google.State(); project.SendInfoToLog($"Текущее состояние: {currentState}");
//обработка разных состояний
switch (currentState) { case "ok": break; case "inputLogin": break; case "CAPTCHA": project.SendWarningToLog("Обнаружена капча");
break; }
string GAuth(bool log = false)
Выполняет авторизацию через систему Google Auth (для сторонних сервисов).
Возвращает: Строка с результатом авторизации ("SUCCESS" при успехе)
Параметры:
log - включить логирование (по умолчанию false)
Пример:
C#:
//авторизация через Google Auth
string authResult = google.GAuth(log: true); if (authResult.Contains("SUCCESS")) { } else { project.SendErrorToLog($"Ошибка Google Auth: {authResult}");
}
void SaveCookies()
Сохраняет текущие куки Google в базу данных для последующего использования.
Пример:
C#:
//сохранение кук после успешной авторизации
google.SaveCookies();
void ParseSecurity()
Парсит информацию о настройках безопасности аккаунта Google и сохраняет в базу данных.
Пример:
C#:
//получение информации о безопасности аккаунта
google.ParseSecurity();
Guild
Класс для работы с Guild.xyz . Предоставляет возможности для парсинга ролей гильдий, анализа подключений и управления элементами интерфейса.
Конструктор
Guild(IZennoPosterProjectModel project, Instance instance, bool log = false)
Создает новый экземпляр класса Guild для работы с гильдиями.
Параметры:
project - проект ZennoPoster
instance - экземпляр браузера
log - включить логирование (по умолчанию false)
Пример:
C#:
// создание экземпляра Guild с логированием
var guild = new Guild(project, instance, true);
// создание экземпляра Guild без логирования
var guild = new Guild(project, instance);
Методы
void ParseRoles(string tablename, bool append = true)
Парсит роли гильдий на текущей странице и сохраняет данные в базу данных.
Параметры:
tablename - имя таблицы для сохранения данных
append - добавлять к существующим данным или перезаписывать (по умолчанию true)
Пример:
C#:
// парсинг ролей с добавлением к существующим данным
guild.ParseRoles("guild_data", true);
// парсинг ролей с перезаписью данных
guild.ParseRoles("guild_data", false);
// проверка результатов
string doneRoles = project.Variables["guildDone"].Value; string undoneRoles = project.Variables["guildUndone"].Value; project.SendInfoToLog($"Завершенные роли: {doneRoles}");
project.SendInfoToLog($"Незавершенные роли: {undoneRoles}");
string Svg(string d)
Возвращает: string - тип социальной сети
Определяет тип социальной сети по SVG-коду иконки.
Параметры:
d - SVG-код или HTML содержимое с иконкой
Пример:
C#:
// определение типа по SVG
string svgCode = "M108,136a16,16,0,1,1-16-16A16,16,0,0,1,108,136Z..."; string socialType = guild.Svg(svgCode); project.SendInfoToLog($"Тип социальной сети: {socialType}"); // выведет "discord"
// если тип не распознан
string unknownSvg = "some-unknown-svg-code"; string result = guild.Svg(unknownSvg); project.SendInfoToLog($"Результат: {result}"); // выведет пустую строку
string Svg(HtmlElement he)
Возвращает: string - тип социальной сети
Определяет тип социальной сети по HTML-элементу с иконкой.
Параметры:
he - HTML-элемент с SVG-иконкой
Пример:
C#:
// получение элемента с иконкой
var iconElement = instance.ActiveTab.FindElementByAttribute("div", "class", "icon-container", "text", 0);
// определение типа социальной сети
string socialType = guild.Svg(iconElement); if (!string.IsNullOrEmpty(socialType)) { project.SendInfoToLog($"Найдена иконка: {socialType}");
} else { project.SendWarningToLog("Тип социальной сети не определен");
}
Парсит информацию о подключенных социальных сетях на странице.
Пример:
C#:
// парсинг подключений
var connections = guild.ParseConnections();
// обработка результатов
foreach (var connection in connections) { string platform = connection.Key; // тип платформы (discord, twitter и т.д.)
string status = connection.Value; // статус ("none" если не подключено, или текст со статусом)
if (status == "none") { project.SendWarningToLog($"{platform} не подключен");
} else { project.SendInfoToLog($"{platform}: {status}"); } }
// проверка конкретной платформы
if (connections.ContainsKey("discord")) { project.SendInfoToLog($"Discord статус: {connections["discord"]}");
}
HtmlElement MainButton()
Возвращает: HtmlElement - главная кнопка на странице
Находит и возвращает основную кнопку действия на странице гильдии.
Пример:
C#:
// получение главной кнопки
var mainButton = guild.MainButton();
if (mainButton != null) { // проверка текста кнопки
string buttonText = mainButton.InnerText; project.SendInfoToLog($"Текст кнопки: {buttonText}");
// клик по кнопке
mainButton.Click(); } else { project.SendErrorToLog("Главная кнопка не найдена");
}
Класс X
Упрощённый менеджер аккаунтов Twitter/X для автоматизации входа и работы с профилем. Выполняет авторизацию через токены или данные логина, проверяет статус аккаунта, анализирует информацию профиля и настройки безопасности.
Описание: Создает экземпляр менеджера X с указанным проектом, экземпляром браузера и настройкой логирования. Автоматически загружает данные аккаунта из базы данных.
Параметры:
project - модель проекта ZennoPoster
instance - экземпляр браузера
log - включить/выключить подробное логирование (по умолчанию false)
Пример:
C#:
var x = new X(project, instance, true);
Публичные методы
Load(bool log = false)
Возвращает: string - статус аккаунта ("ok", "restricted", "suspended", "emailCapcha")
Описание: Выполняет полную загрузку и авторизацию в X. Проверяет состояние аккаунта, использует сохранённый токен или выполняет вход через логин/пароль при необходимости.
Параметры:
log - включить подробное логирование процесса
Пример:
C#:
string status = x.Load(true); if (status == "ok") { } else { project.SendWarningToLog($"Проблема с аккаунтом: {status}", false);
}
Auth()
Описание: Выполняет пошаговую авторизацию в X для внешних приложений через OAuth. Обрабатывает все этапы входа: ввод логина, пароля, двухфакторную аутентификацию и подтверждение доступа.
Возвращает: string - текущее состояние страницы авторизации
Описание: Определяет текущий этап процесса авторизации. Возвращает состояния: "InputLogin", "InputPass", "InputOTP", "ClickLogin", "CheckUser", "AuthV1SignIn", "AuthV1Confirm" и другие.
Пример:
C#:
string currentState = x.State(); project.SendInfoToLog($"Текущий этап авторизации: {currentState}", false);
UpdXCreds(Dictionary<string, string> data)
Описание: Обновляет данные аккаунта в базе данных. Принимает словарь с ключами: LOGIN, PASSWORD, EMAIL, EMAIL_PASSWORD, TOKEN, CODE2FA, RECOVERY_SEED.
Параметры:
data - словарь с новыми данными аккаунта
Пример:
C#:
var newData = new Dictionary<string, string> { {"LOGIN", "newusername"}, {"PASSWORD", "newpassword"}, {"EMAIL", "[EMAIL]new@email.com[/EMAIL]"} }; x.UpdXCreds(newData);
ParseProfile()
Описание: Анализирует профиль пользователя X и сохраняет данные в базу: дату создания, ID, имя пользователя, описание, местоположение, аватар, баннер, количество подписчиков и подписок.
Пример:
C#:
x.ParseProfile();
ParseSecurity()
Описание: Парсит страницу настроек безопасности аккаунта и сохраняет информацию: email, телефон, дату создания, страну, язык, пол, дату рождения.
Пример:
C#:
x.ParseSecurity();
Sql
Набор для работы с SQLite и PostgreSQL базами данных. Содержит высокоуровневые статичные обертки для работы с БД(получение данных, обновления, управление таблицами и колонками) и базовый dSql класс с поддержкой асинхронных операций, параметризованных запросов, и автоматического определения подходящих драйверов подключения на основе Dapper.
Класс Db
Предоставляет удобные методы для выполнения SQL-операций, управления таблицами и колонками в базах PostgreSQL и SQLite, а также миграции данных между различными типами баз данных.
Основные методы для работы с данными
DbGet
Возвращает: string - результат SQL-запроса SELECT в виде строки
Описание: Получает данные из указанной таблицы по заданным параметрам
Параметры:
toGet (string) - названия колонок через запятую для получения
tableName (string, optional) - название таблицы (по умолчанию из переменной projectTable)
log (bool, optional) - логировать ли запрос (по умолчанию false)
throwOnEx (bool, optional) - выбрасывать ли исключения (по умолчанию false)
key (string, optional) - название ключевого поля (по умолчанию "id")
acc (string, optional) - значение для поиска (по умолчанию из переменной acc0)
where (string, optional) - дополнительное условие WHERE
Пример использования:
C#:
//получить статус текущей записи
string status = project.DbGet("status");
//получить email по конкретному ID
string email = project.DbGet("email", "users", key: "user_id", acc: "123");
DbUpd
Описание: Обновляет данные в таблице
Параметры:
toUpd (string) - строка обновления в формате "column1=value1, column2=value2"
tableName (string, optional) - название таблицы
log (bool, optional) - логировать ли запрос
throwOnEx (bool, optional) - выбрасывать ли исключения
last (bool, optional) - автоматически обновлять поле last текущим временем (по умолчанию true)
key (string, optional) - название ключевого поля
acc (object, optional) - значение для поиска
where (string, optional) - дополнительное условие WHERE
Пример использования:
C#:
//обновить статус текущей записи
project.DbUpd("status='completed'");
//обновить несколько полей без автоматического last
project.DbUpd("email='[EMAIL]test@test.com[/EMAIL]', phone='+123456'", last: false);
DbKey
Возвращает: string - криптографический ключ указанного типа
Описание: Получает криптографический ключ из таблицы _wallets в зависимости от типа блокчейна
TblExist
Возвращает: bool - true если таблица существует
Описание: Проверяет существование таблицы в базе данных
Параметры:
tblName (string) - название таблицы
log (bool, optional) - логировать ли операцию
Пример использования:
C#:
//проверить существование таблицы
if (project.TblExist("users")) { }
TblColumns
Возвращает: List<string> - список названий колонок
Описание: Получает список всех колонок в таблице
Параметры:
tblName (string) - название таблицы
log (bool, optional) - логировать ли операцию
Пример использования:
C#:
//получить список колонок
var columns = project.TblColumns("users"); foreach(var column in columns) { project.SendInfoToLog($"Колонка: {column}");
}
TblForProject
Возвращает: Dictionary<string, string> - структура таблицы для проекта
Описание: Создает стандартную структуру таблицы для проекта на основе переменной cfgToDo и дополнительных колонок
Параметры:
projectColumns (List или string[], optional) - дополнительные колонки
defaultType (string, optional) - тип данных по умолчанию
Пример использования:
C#:
//создать структуру с базовыми колонками
var structure = project.TblForProject();
//добавить дополнительные колонки
var customColumns = new List {"email", "phone", "address"}; var extendedStructure = project.TblForProject(customColumns);
TblPrepareDefault
Описание: Полная подготовка таблицы проекта - создание, добавление недостающих колонок и заполнение записями
Параметры:
log (bool, optional) - логировать ли операции
Пример использования:
C#:
//подготовить таблицу проекта со всеми необходимыми полями
project.TblPrepareDefault(log: true);
Методы для работы с колонками
ClmnAdd
Описание: Добавляет колонку(и) в существующую таблицу
Параметры:
clmnName (string) - название колонки ИЛИ
columns (string[]) - массив названий колонок ИЛИ
tableStructure (Dictionary<string, string>) - структура колонок
tblName (string) - название таблицы
log (bool, optional) - логировать ли операцию
defaultValue (string, optional) - значение по умолчанию
Пример использования:
C#:
//добавить одну колонку
project.ClmnAdd("phone", "users");
//добавить несколько колонок
string[] newColumns = {"phone", "address", "city"}; project.ClmnAdd(newColumns, "users");
ClmnExist
Возвращает: bool - true если колонка существует
Описание: Проверяет существование колонки в таблице
Параметры:
clmnName (string) - название колонки
tblName (string) - название таблицы
log (bool, optional) - логировать ли операцию
Пример использования:
C#:
//проверить наличие колонки перед использованием
if (!project.ClmnExist("email", "users")) { project.ClmnAdd("email", "users"); }
ClmnDrop
Описание: Удаляет колонку(и) из таблицы
Параметры:
clmnName (string) - название колонки ИЛИ
tableStructure (Dictionary<string, string>) - структура колонок для удаления
tblName (string) - название таблицы
log (bool, optional) - логировать ли операцию
Пример использования:
C#:
//удалить одну колонку
project.ClmnDrop("old_column", "users");
Методы для миграции и диапазонов
MigrateTable
Описание: Копирует данные из одной таблицы в другую с переименованием ключевых полей
Параметры:
source (string) - исходная таблица
dest (string) - таблица назначения
Пример использования:
C#:
//мигрировать данные между таблицами
project.MigrateTable("old_accounts", "new_accounts");
AddRange
Описание: Добавляет записи с ID от текущего максимального до указанного значения
Параметры:
tblName (string) - название таблицы
range (int, optional) - конечный ID (по умолчанию из переменной rangeEnd)
log (bool, optional) - логировать ли операцию
Пример использования:
C#:
//заполнить таблицу записями до ID 100
project.AddRange("accounts", 100);
//использовать значение из переменной rangeEnd
project.AddRange("accounts");
DbSettings
Описание: Загружает настройки из таблицы _settings и устанавливает их как переменные проекта
Параметры:
set (bool, optional) - устанавливать ли переменные (по умолчанию true)
log (bool, optional) - логировать ли операцию
Пример использования:
C#:
//загрузить все настройки из базы в переменные проекта
project.DbSettings(log: true);
//только прочитать настройки без установки переменных
project.DbSettings(set: false);
Класс dSql (Dapper based)
Описание
Универсальный класс для работы с базами данных SQLite и PostgreSQL. Предоставляет единый интерфейс для подключения, выполнения запросов, миграции данных и управления таблицами. Автоматически определяет тип базы данных и использует соответствующие методы для выполнения операций. Особенно полезен для проектов, где нужна поддержка нескольких типов баз данных одновременно.
Конструкторы
dSql(string dbPath, string dbPass)
Описание: Создает подключение к базе данных SQLite по указанному пути.
Параметры:
dbPath - путь к файлу базы данных SQLite
dbPass - пароль базы данных (в данной реализации не используется)
Пример:
C#:
var db = new dSql(@"C:\MyProject\database.sqlite", "");
dSql(string hostname, string port, string database, string user, string password)
Описание: Создает подключение к базе данных PostgreSQL с указанными параметрами подключения.
Параметры:
hostname - адрес сервера базы данных
port - порт подключения
database - имя базы данных
user - имя пользователя
password - пароль пользователя
Пример:
C#:
var db = new dSql("localhost", "5432", "mydb", "postgres", "password123");
dSql(string connectionstring)
Описание: Создает подключение к базе данных PostgreSQL используя строку подключения.
Параметры:
connectionstring - полная строка подключения к базе данных
Пример:
C#:
string connStr = "Host=localhost;Port=5432;Database=mydb;Username=postgres;Password=pass;"; var db = new dSql(connStr);
dSql(IDbConnection connection)
Описание: Создает экземпляр используя существующее подключение к базе данных.
Параметры:
connection - готовое подключение к базе данных
Пример:
C#:
var existingConnection = new SqliteConnection("Data Source=mydb.sqlite"); var db = new dSql(existingConnection);
Публичные методы
DbReadAsync(string sql, string columnSeparator = "|", string rawSeparator = "\r\n")
Возвращает: Task - результат запроса в виде строки
Описание: Выполняет SQL-запрос на чтение данных и возвращает результат в виде текстовой строки с настраиваемыми разделителями.
Параметры:
sql - SQL-запрос для выполнения
columnSeparator - символ для разделения колонок (по умолчанию "|")
rawSeparator - символ для разделения строк (по умолчанию "\r\n")
Пример:
C#:
var db = new dSql(@"C:\data.sqlite", ""); string result = await db.DbReadAsync("SELECT name, email FROM users WHERE active = 1", "|", "\n"); project.SendInfoToLog($"Получены данные: {result}", false);
DbRead(string sql, string separator = "|")
Возвращает: string - результат запроса в виде строки
Описание: Синхронная версия DbReadAsync. Выполняет SQL-запрос на чтение данных.
Параметры:
sql - SQL-запрос для выполнения
separator - разделитель для колонок (по умолчанию "|")
Пример:
C#:
var db = new dSql("localhost", "5432", "testdb", "user", "pass"); string users = db.DbRead("SELECT id, username FROM accounts LIMIT 10"); project.SendInfoToLog($"Список пользователей: {users}", false);
Описание: Выполняет SQL-запрос для записи, обновления или удаления данных с возможностью использования параметров.
Параметры:
sql - SQL-запрос для выполнения
parameters - параметры запроса для безопасной передачи значений
Пример:
C#:
var db = new dSql(@"C:\accounts.sqlite", ""); var param = db.CreateParameter("@username", "john_doe"); int affected = await db.DbWriteAsync("UPDATE users SET last_login = NOW() WHERE username = @username", param); project.SendInfoToLog($"Обновлено записей: {affected}", false);
DbWrite(string sql, params IDbDataParameter[] parameters)
Возвращает: int - количество затронутых строк
Описание: Синхронная версия DbWriteAsync. Выполняет запросы на изменение данных.
Параметры:
sql - SQL-запрос для выполнения
parameters - параметры запроса
Пример:
C#:
var db = new dSql("localhost", "5432", "mydb", "admin", "secret"); var nameParam = db.CreateParameter("@name", "Новый пользователь");
var emailParam = db.CreateParameter("@email", "[EMAIL]user@example.com[/EMAIL]"); int result = db.DbWrite("INSERT INTO users (name, email) VALUES (@name, @email)", nameParam, emailParam); project.SendInfoToLog($"Добавлено записей: {result}", false);
CreateParameter(string name, object value)
Возвращает: IDbDataParameter - параметр для SQL-запроса
Описание: Создает параметр для безопасной передачи значений в SQL-запросы, автоматически подбирая правильный тип в зависимости от типа базы данных.
var db = new dSql(@"C:\test.sqlite", ""); var param1 = db.CreateParameter("@userId", 123); var param2 = db.CreateParameter("@status", "active"); //использование параметров в запросе
int result = db.DbWrite("UPDATE accounts SET status = @status WHERE id = @userId", param1, param2);
Описание: Создает массив параметров для удобной передачи нескольких значений в SQL-запрос.
Параметры:
parameters - массив кортежей с именами и значениями параметров
Пример:
C#:
var db = new dSql("localhost", "5432", "shop", "user", "pass"); var parameters = db.CreateParameters( ("@productName", "Товар 1"),
("@price", 1250.50), ("@categoryId", 5) ); int result = db.DbWrite("INSERT INTO products (name, price, category_id) VALUES (@productName, @price, @categoryId)", parameters);
CopyTableAsync(string sourceTable, string destinationTable)
Возвращает: Task - количество скопированных строк
Описание: Полностью копирует структуру и данные таблицы, включая первичные ключи и ограничения. Поддерживает копирование между схемами в PostgreSQL.
Параметры:
sourceTable - имя исходной таблицы (может включать схему: "schema.table")
destinationTable - имя новой таблицы
Пример:
C#:
var db = new dSql("localhost", "5432", "database", "user", "password"); try { int copiedRows = await db.CopyTableAsync("public.users", "public.users_backup"); project.SendInfoToLog($"Таблица скопирована, строк: {copiedRows}", false);
} catch (Exception ex) { project.SendErrorToLog($"Ошибка копирования: {ex.Message}", false);
}
MigrateAllTablesAsync(dSql sourceDb, dSql destinationDb)
Возвращает: Task - общее количество мигрированных строк
Описание: Статический метод для миграции всех таблиц между разными типами баз данных. Переносит структуру таблиц, данные и пытается сохранить ограничения.
Параметры:
sourceDb - исходная база данных
destinationDb - целевая база данных
Пример:
C#:
var sqliteDb = new dSql(@"C:\old_data.sqlite", ""); var postgresDb = new dSql("localhost", "5432", "newdb", "admin", "pass");
try { int totalRows = await dSql.MigrateAllTablesAsync(sqliteDb, postgresDb); project.SendInfoToLog($"Миграция завершена, перенесено строк: {totalRows}", false);
} catch (Exception ex) { project.SendErrorToLog($"Ошибка миграции: {ex.Message}", false);
} finally { sqliteDb.Dispose(); postgresDb.Dispose(); }
Upd(string toUpd, object id, string tableName = null, string where = null, bool last = false)
Возвращает: Task - количество обновленных строк
Описание: Обновляет данные в таблице с возможностью автоматического добавления времени последнего изменения.
Параметры:
toUpd - строка с полями для обновления в формате "field1 = value1, field2 = value2"
id - идентификатор записи для обновления
tableName - имя таблицы
where - дополнительное условие WHERE (если не указано, используется id)
last - добавить поле last с текущим временем
Пример:
C#:
var db = new dSql(@"C:\accounts.sqlite", ""); int updated = await db.Upd("status = 'completed', progress = 100", 15, "tasks", null, true); project.SendInfoToLog($"Обновлено записей: {updated}", false);
Get(string toGet, string id, string tableName = null, string where = null)
Возвращает: Task - значение поля из базы данных
Описание: Получает значение указанного поля из таблицы по условию.
Параметры:
toGet - имя поля для получения значения
id - идентификатор записи
tableName - имя таблицы
where - дополнительное условие WHERE
Пример:
C#:
var db = new dSql("localhost", "5432", "shop", "user", "pass"); string userName = await db.Get("username", "123", "users"); project.SendInfoToLog($"Имя пользователя: {userName}", false);
//с дополнительным условием
string email = await db.Get("email", "", "users", "username = 'admin' AND active = 1");
Описание: Добавляет записи с последовательными ID до указанного диапазона. Полезно для предварительного заполнения таблиц.
Параметры:
range - максимальный ID для добавления
tableName - имя таблицы
Пример:
C#:
var db = new dSql(@"C:\accounts.sqlite", ""); await db.AddRange(1000, "accounts");
Tools
Разнообразная коллекция инструментов для упрощения рутинных задач. Включает графический интерфейс для просмотра балансов с цветовым кодированием, универсальный конвертер между форматами данных (hex, base64, bech32), конструктор интерактивных форм ввода, систему справки по API методам, генератор OTP-кодов, инструмент синхронизации проектов с GitHub и другие утилиты.
Accountant
Класс для отображения таблиц балансов в удобном графическом интерфейсе. Создает окна с данными из базы данных или списков, поддерживает цветовое кодирование балансов и расчет итоговых сумм.
Конструкторы
Accountant(IZennoPosterProjectModel project, bool log = false)
Создает новый экземпляр класса Accountant.
Параметры:
project (IZennoPosterProjectModel) - объект проекта ZennoPoster
log (bool) - включить логирование операций (по умолчанию false)
Пример:
C#:
var accountant = new Accountant(project, true); //включаем логирование операций
Методы
void ShowBalanceTable(string chains = null)
Отображает таблицу балансов из базы данных в графическом окне с пагинацией и цветовым кодированием.
Параметры:
chains (string) - список колонок через запятую для отображения (если null, показываются все колонки)
Пример:
C#:
//показать все колонки таблицы балансов
accountant.ShowBalanceTable();
//показать только определенные колонки
accountant.ShowBalanceTable("acc0,eth,btc,usdt");
void ShowBalanceTableFromList(List<string> data)
Отображает таблицу балансов из готового списка строк формата "счет:баланс".
Параметры:
data (List) - список строк в формате "счет:баланс"
Пример:
C#:
var balances = new List { "wallet1:0.12345", "wallet2:0.00123", "wallet3:1.5678" }; //отобразить балансы из списка
accountant.ShowBalanceTableFromList(balances);
Особенности
Цветовое кодирование: Балансы окрашиваются разными цветами в зависимости от размера (от синего для больших сумм до красного для маленьких)
Автоматические суммы: В конце таблицы добавляется строка с итоговыми суммами по всем колонкам
Пагинация: Большие таблицы разбиваются на страницы по 100 строк с кнопками навигации
Форматирование: Все балансы отображаются с точностью до 7 знаков после запятой
Класс Converer
Описание
Статический класс для преобразования данных между различными форматами: hex (шестнадцатеричные строки), base64, bech32 (адреса блокчейна), bytes и обычный текст. Поддерживает двустороннее преобразование между любыми из этих форматов, что полезно при работе с криптографическими данными, адресами кошельков и кодированием информации.
log - включить логирование операции (по умолчанию false)
Пример:
C#:
// преобразование hex в base64
string result = Converer.ConvertFormat(project, "48656c6c6f", "hex", "base64", true); project.SendInfoToLog($"Результат: {result}");
// преобразование текста в hex
string hexResult = Converer.ConvertFormat(project, "Hello World", "text", "hex"); project.SendInfoToLog($"Текст в hex: {hexResult}");
// преобразование bech32 адреса в hex
string bech32ToHex = Converer.ConvertFormat(project, "init1qqqsyqcyq5rqwzqfpg9scrgwpugpzysnpswf", "bech32", "hex"); //результат преобразования
if (bech32ToHex != null) { project.SendInfoToLog($"Bech32 в hex: {bech32ToHex}");
} else { project.SendErrorToLog("Ошибка преобразования bech32");
}
F0rms
Класс F0rms предоставляет набор методов для создания интерактивных диалоговых окон с различными типами пользовательского ввода. Позволяет создавать формы для ввода текста, ключ-значение пар, выбора из списка и других типов данных.
Конструкторы
F0rms(IZennoPosterProjectModel project)
Создает новый экземпляр класса F0rms.
Параметры:
project - экземпляр проекта для логирования
Пример:
C#:
var forms = new F0rms(project);
Методы
InputBox
Возвращает: string
Отображает простое диалоговое окно для ввода многострочного текста.
Параметры:
message - заголовок окна (по умолчанию "input data please")
width - ширина окна в пикселях (по умолчанию 600)
height - высота окна в пикселях (по умолчанию 600)
Пример:
C#:
//получить текст от пользователя
string userText = F0rms.InputBox("Введите ваш текст:", 800, 400);
project.SendInfoToLog($"Введенный текст: {userText}");
Создает диалоговое окно для ввода данных построчно с указанием имени ключевого столбца. Возвращает словарь где ключи - номера строк, а значения - SQL-подобные выражения.
Параметры:
keycolumn - имя столбца для ключа (по умолчанию "input Column Name")
title - заголовок окна (по умолчанию "Input data line per line")
Пример:
C#:
//получить данные построчно
var dataDict = forms.GetLinesByKey("email", "Введите email адреса");
if (dataDict != null) { foreach (var pair in dataDict) { project.SendInfoToLog($"Строка {pair.Key}: {pair.Value}");
} }
GetLines
Возвращает: List<string>
Создает диалоговое окно для ввода данных построчно. Возвращает список SQL-подобных выражений.
Параметры:
keycolumn - имя столбца для ключа (по умолчанию "input Column Name")
title - заголовок окна (по умолчанию "Input data line per line")
Пример:
C#:
//получить список строк
var lines = forms.GetLines("username", "Введите имена пользователей");
if (lines != null) { foreach (string line in lines) { project.SendInfoToLog($"Строка: {line}");
} }
Создает диалоговое окно с указанным количеством полей для ввода ключ-значение пар.
Параметры:
quantity - количество пар для ввода
keyPlaceholders - список значений по умолчанию для ключей (может быть null)
valuePlaceholders - список значений по умолчанию для значений (может быть null)
title - заголовок окна (по умолчанию "Input Key-Value Pairs")
prepareUpd - если true, подготавливает данные в SQL-формате (по умолчанию true)
Пример:
C#:
//получить 3 пары ключ-значение
var keyPlaceholders = new List { "name", "age", "city" }; var valuePlaceholders = new List { "Введите имя", "Введите возраст", "Введите город" };
var pairs = forms.GetKeyValuePairs(3, keyPlaceholders, valuePlaceholders, "Данные пользователя");
if (pairs != null) { foreach (var pair in pairs) { project.SendInfoToLog($"Пара: {pair.Value}");
} }
Создает диалоговое окно для ввода пар ключ-булево значение с использованием чекбоксов.
Параметры:
quantity - количество пар для ввода
keyPlaceholders - список текстов для ключей (может быть null)
valuePlaceholders - список текстов для чекбоксов (может быть null)
title - заголовок окна (по умолчанию "Input Key-Bool Pairs")
prepareUpd - если true, использует номера как ключи (по умолчанию true)
Пример:
C#:
//получить настройки с чекбоксами
var options = new List { "option1", "option2", "option3" }; var labels = new List { "Включить уведомления", "Автосохранение", "Темная тема" };
var boolPairs = forms.GetKeyBoolPairs(3, options, labels, "Настройки");
if (boolPairs != null) { foreach (var pair in boolPairs) { project.SendInfoToLog($"Настройка {pair.Key}: {pair.Value}");
} }
GetKeyValueString
Возвращает: string
Создает диалоговое окно для ввода ключ-значение пар и возвращает их как строку в формате "key1='value1', key2='value2'".
Параметры:
quantity - количество пар для ввода
keyPlaceholders - список значений по умолчанию для ключей (может быть null)
valuePlaceholders - список значений по умолчанию для значений (может быть null)
title - заголовок окна (по умолчанию "Input Key-Value Pairs")
Пример:
C#:
//получить пары как строку
var pairsString = forms.GetKeyValueString(2, new List { "name", "email" }, new List { "Иван", "[EMAIL]ivan@example.com[/EMAIL]" },
"Контактные данные");
project.SendInfoToLog($"Пары: {pairsString}");
//результат: "name='Иван', email='[EMAIL]ivan@example.com[/EMAIL]'"
GetSelectedItem
Возвращает: string
Создает диалоговое окно с выпадающим списком для выбора одного элемента из предоставленного списка.
Параметры:
items - список элементов для выбора
title - заголовок окна (по умолчанию "Select an Item")
labelText - текст метки (по умолчанию "Select:")
Пример:
C#:
//выбор из списка браузеров
var browsers = new List { "Chrome", "Firefox", "Safari", "Edge" }; string selectedBrowser = forms.GetSelectedItem(browsers, "Выберите браузер", "Браузер:");
if (!string.IsNullOrEmpty(selectedBrowser)) { project.SendInfoToLog($"Выбран браузер: {selectedBrowser}");
}
Helper
Статический класс с утилитами для отладки и поиска документации по методам ZennoPoster API. Предоставляет удобный способ поиска информации о методах и их параметрах прямо из проекта.
Методы
Help
Возвращает: void
Ищет документацию по методам в XML-файлах ZennoPoster и отображает результаты в удобном окне просмотра.
Параметры:
project (IZennoPosterProjectModel) - экземпляр проекта ZennoPoster
toSearch (string, необязательный) - строка для поиска в названиях методов. Если не указан, появится диалог ввода
Пример использования:
C#:
//поиск всех методов содержащих слово "Click"
project.Help("Click");
//вызов с диалогом ввода поискового запроса
project.Help();
//поиск методов работы с элементами
project.Help("Element");
Метод автоматически просматривает XML-файлы документации ZennoPoster (ZennoLab.CommandCenter.xml, ZennoLab.InterfacesLibrary.xml, ZennoLab.Macros.xml, ZennoLab.Emulation.xml) и извлекает полную информацию о найденных методах, включая описание, параметры, возвращаемые значения, примеры использования и исключения. Результаты отображаются в удобном окне с возможностью копирования текста.
OTP
Статический класс для получения одноразовых паролей (OTP) различными способами. Позволяет генерировать TOTP коды в автономном режиме и получать их из сервиса FirstMail.
Методы
Offline
Возвращаемое значение: string - сгенерированный TOTP код
Генерирует одноразовый пароль TOTP в автономном режиме по секретному ключу. Если до истечения текущего кода осталось мало времени, метод дожидается генерации нового кода для повышения надежности.
Параметры:
keyString (string) - секретный ключ в формате Base32
waitIfTimeLess (int, необязательный) - если до истечения кода осталось меньше указанных секунд, метод дожидается нового кода (по умолчанию 5)
Пример использования:
C#:
string secret = "JBSWY3DPEHPK3PXP"; string otpCode = OTP.Offline(secret); project.SendInfoToLog($"Сгенерированный OTP код: {otpCode}");
//дождаться нового кода если осталось меньше 10 секунд
string otpCode2 = OTP.Offline(secret, 10); project.SendInfoToLog($"Новый OTP код: {otpCode2}");
Получает одноразовый пароль из сервиса FirstMail для указанного email адреса. Использует внутренний механизм для извлечения кода из почтовых сообщений.
Параметры:
project (IZennoPosterProjectModel) - экземпляр проекта ZennoPoster
email (string) - email адрес для получения OTP кода
Пример использования:
C#:
string email = "[EMAIL]test@example.com[/EMAIL]"; string otpCode = OTP.FirstMail(project, email); project.SendInfoToLog($"OTP код из FirstMail: {otpCode}");
GHsync
Класс для автоматической синхронизации локальных папок с репозиториями GitHub. Позволяет массово коммитить и пушить изменения в несколько проектов одновременно, с проверкой размеров файлов и автоматическим созданием .gitignore.
Конструкторы
GHsync(IZennoPosterProjectModel project)
Создает новый экземпляр класса для синхронизации с GitHub.
Параметры:
project - экземпляр проекта ZennoPoster для логирования
Пример использования:
C#:
var ghSync = new GHsync(project); //создаем экземпляр для работы с GitHub
Публичные методы
GetFileHash(string filePath) : string
Вычисляет MD5-хеш файла для проверки изменений.
Возвращает: MD5-хеш файла в виде строки или пустую строку при ошибке
Параметры:
filePath - полный путь к файлу
Пример использования:
C#:
string hash = GHsync.GetFileHash(@"C:\myproject\file.txt"); project.SendInfoToLog($"Hash файла: {hash}");
//получаем хеш файла для проверки изменений
Main(string baseDir, string token, string username, string commmit = "ts")
Основной метод для синхронизации всех проектов из базовой директории с GitHub репозиториями.
Параметры:
baseDir - базовая директория, содержащая папки проектов
token - GitHub Personal Access Token (должен начинаться с "ghp_")
username - имя пользователя GitHub
commmit - текст коммита (по умолчанию "ts" - будет заменен на текущее время)
Пример использования:
C#:
var ghSync = new GHsync(project); //создаем экземпляр синхронизации
ghSync.Main(@"C:\MyProjects", "ghp_your_token_here", "yourusername", "Обновление проектов");
//синхронизируем все проекты из папки
Особенности работы:
Читает конфигурацию из файла .sync.txt в базовой директории
Пропускает папки помеченные как false в конфигурации
Проверяет размеры файлов и репозиториев (максимум 100MB на файл, 1GB на репозиторий)
Исключает бинарные файлы и медиа-контент
Автоматически создает и обновляет .gitignore
Выводит подробную статистику по завершению
W3b
Комплекс для работы с различными блокчейнами. Содержит RPC, инструменты для отправки транзакций и взаимодействия с смарт-контрактами, универсальные методы получения балансов токенов (EVM, Solana, Aptos, Sui), интеграцию с ценовыми API (CoinGecko, DexScreener, KuCoin) и упрощенные обертки для быстрого выполнения стандартных блокчейн-операций.
Класс Rpc
Описание
Статический класс для получения URL-адресов RPC узлов различных блокчейн сетей. Предоставляет удобный доступ к публичным RPC эндпоинтам для популярных блокчейнов, включая Ethereum, Layer 2 сети, альтернативные блокчейны и тестовые сети.
Публичные методы
Get(string name)
Возвращает: string - URL-адрес RPC узла для указанной сети
Описание: Получает URL RPC узла по имени блокчейн сети. Поиск не чувствителен к регистру и игнорирует символы подчеркивания.
Параметры:
name - название блокчейн сети
Пример:
C#:
//получить URL для Ethereum
string ethRpc = Rpc.Get("Ethereum"); project.SendInfoToLog($"Ethereum RPC: {ethRpc}", false);
//получить URL для Solana (нечувствителен к регистру)
string solanaRpc = Rpc.Get("solana"); project.SendInfoToLog($"Solana RPC: {solanaRpc}", false);
//обработка ошибки для неизвестной сети
try { string unknownRpc = Rpc.Get("UnknownChain"); } catch (ArgumentException ex) { project.SendErrorToLog($"Сеть не найдена: {ex.Message}", false);
}
Публичные свойства
Класс предоставляет статические свойства для быстрого доступа к популярным блокчейн сетям:
И многие другие сети включая тестовые (Sepolia, Solana_Devnet, Solana_Testnet)
Пример использования свойств:
C#:
//прямой доступ к Ethereum RPC
string ethUrl = Rpc.Ethereum; project.SendInfoToLog($"ETH RPC: {ethUrl}", false);
//использование для разных сетей
string[] networks = { Rpc.Arbitrum, Rpc.Base, Rpc.Polygon }; foreach(string rpc in networks) { project.SendInfoToLog($"Network RPC: {rpc}", false); }
Tx
Класс для выполнения транзакций в блокчейн-сетях Ethereum. Предоставляет методы для отправки нативной валюты, ERC20 токенов, NFT, а также специальные операции типа approve и wrap.
Конструкторы
Tx(IZennoPosterProjectModel project, bool log = false)
Создает новый экземпляр класса для работы с блокчейн-транзакциями.
Параметры:
project - экземпляр проекта ZennoPoster
log - включить логирование операций (по умолчанию false)
Пример:
C#:
var tx = new Tx(project, log: true); //создание экземпляра с включенным логированием
Методы
string SendTx(string chainRpc, string contractAddress, string encodedData, decimal value, string walletKey, int txType = 2, int speedup = 1)
Отправляет транзакцию в блокчейн с указанными параметрами.
Возвращает: string - хеш транзакции
Параметры:
chainRpc - URL RPC узла блокчейн-сети
contractAddress - адрес контракта или получателя
encodedData - закодированные данные транзакции
value - количество нативной валюты для отправки
walletKey - приватный ключ кошелька (если пустой, берется из базы проекта)
txType - тип транзакции (0 - legacy, 2 - EIP-1559, по умолчанию 2)
speedup - множитель для увеличения комиссии (по умолчанию 1)
string Approve(string contract, string spender, string amount, string rpc)
Выдает разрешение на использование ERC20 токенов другому адресу или контракту.
Возвращает: string - хеш транзакции
Параметры:
contract - адрес контракта токена
spender - адрес, которому выдается разрешение
amount - количество токенов ("max" для максимального значения, "cancel" для отмены)
rpc - URL RPC узла
Пример:
C#:
//выдать максимальное разрешение на USDT
string hash = tx.Approve("0xdAC17F958D2ee523a2206206994597C13D831ec7", "0x456...", "max", "[URL]https://rpc.ankr.com/eth[/URL]"); project.SendInfoToLog($"Approve выполнен: {hash}");
string Wrap(string contract, decimal value, string rpc)
Обменивает нативную валюту на wrapped-токен (например, ETH на WETH).
Возвращает: string - хеш транзакции
Параметры:
contract - адрес wrapped-контракта
value - количество нативной валюты для обмена
rpc - URL RPC узла
Пример:
C#:
//обменять 1 ETH на WETH
string hash = tx.Wrap("0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", 1.0m, "[URL]https://rpc.ankr.com/eth[/URL]"); project.SendInfoToLog($"Wrapped {hash}");
string SendNative(string to, decimal amount, string rpc)
Отправляет нативную валюту блокчейна на указанный адрес.
string SendERC721(string contract, string to, BigInteger tokenId, string rpc)
Отправляет NFT (ERC-721 токен) на указанный адрес.
Возвращает: string - хеш транзакции
Параметры:
contract - адрес контракта NFT
to - адрес получателя
tokenId - ID токена для отправки
rpc - URL RPC узла
Пример:
C#:
//отправить NFT с ID 123
string hash = tx.SendERC721("0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D", "0x789...", 123, "[URL]https://rpc.ankr.com/eth[/URL]"); project.SendInfoToLog($"NFT отправлена: {hash}");
Класс EvmTools
Набор инструментов для работы с блокчейнами на базе Ethereum Virtual Machine (EVM). Предоставляет методы для проверки транзакций, получения балансов различных токенов, а также взаимодействия с RPC-узлами блокчейна.
Возвращает: bool - статус выполнения транзакции (true = успех, false = провал)
Описание: Расширенная версия ожидания транзакции с дополнительной информацией о gas и статусе. Отслеживает как завершенные транзакции, так и находящиеся в ожидании.
Параметры:
rpc - URL RPC-узла блокчейна
hash - хэш транзакции для отслеживания
deadline - максимальное время ожидания в секундах (по умолчанию 60)
proxy - прокси в формате "login:pass:ip:port" (опционально)
log - включить подробное логирование процесса
Пример:
C#:
var evmTools = new EvmTools(); string transactionHash = "0x123abc..."; bool success = await evmTools.WaitTxExtended("[URL]https://rpc.ankr.com/eth[/URL]", transactionHash, 120, "", true); if (success) { } else { project.SendWarningToLog("Транзакция провалилась", false);
}
Описание: Базовая версия ожидания подтверждения транзакции в блокчейне. Проверяет статус транзакции до ее завершения или истечения времени.
Параметры:
rpc - URL RPC-узла блокчейна
hash - хэш транзакции
deadline - максимальное время ожидания в секундах
proxy - прокси-сервер (опционально)
log - включить логирование
Пример:
C#:
var evmTools = new EvmTools(); bool result = await evmTools.WaitTx("[URL='https://bsc-dataseed.binance.org/']https://bsc-dataseed.binance.org[/URL]", "0xabc123...", 90); //проверить результат транзакции
Native(string rpc, string address)
Возвращает: string - баланс в hex-формате
Описание: Получает баланс нативной криптовалюты (ETH, BNB, MATIC и т.д.) для указанного адреса.
Параметры:
rpc - URL RPC-узла
address - адрес кошелька для проверки
Пример:
C#:
var evmTools = new EvmTools(); string hexBalance = await evmTools.Native("[URL='https://polygon-rpc.com/']https://polygon-rpc.com[/URL]", "0x742d35Cc6B..."); //преобразовать hex в decimal используя расширения
decimal balance = hexBalance.ToDecimal(18); project.SendInfoToLog($"Баланс: {balance} MATIC", false);
Описание: Получает баланс конкретного токена в экосистеме Sui по его типу.
Параметры:
coinType - тип монеты/токена в экосистеме Sui
rpc - URL RPC-узла (по умолчанию mainnet)
address - адрес кошелька
proxy - прокси-сервер (опционально)
log - включить логирование
Пример:
C#:
var suiTools = new SuiTools(); string usdcType = "0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN"; decimal usdcBalance = await suiTools.GetSuiTokenBalance(usdcType, "", "0xabc123...", "", true); project.SendInfoToLog($"Баланс USDC на Sui: {usdcBalance}", false);
Класс CoinGecco
API-клиент для работы с сервисом CoinGecko. Позволяет получать актуальную информацию о ценах криптовалют и данные о токенах.
Публичные методы
CoinInfo(string CGid = "ethereum")
Возвращает: string - JSON с полной информацией о монете
Описание: Получает подробную информацию о криптовалюте по ее ID в CoinGecko.
Параметры:
CGid - идентификатор монеты в CoinGecko (по умолчанию "ethereum")
Пример:
C#:
var coinGecko = new CoinGecco(); string ethInfo = await coinGecko.CoinInfo("ethereum"); project.SendInfoToLog($"Информация об Ethereum: {ethInfo}", false);
TokenByAddress(string CGid = "ethereum")
Возвращает: string - JSON с информацией о токене по адресу
Описание: Получает информацию о токене по его контрактному адресу в блокчейне.
Параметры:
CGid - идентификатор сети для поиска токена
Пример:
C#:
var coinGecko = new CoinGecco(); string tokenInfo = await coinGecko.TokenByAddress("ethereum"); //обработать полученную информацию
PriceByTiker(string tiker)
Возвращает: decimal - цена в USD
Описание: Статический метод для быстрого получения цены криптовалюты по ее тикеру. Поддерживает ETH, BNB, SOL.
Статический класс с упрощенными методами для работы с блокчейнами. Предоставляет удобные обертки над основными классами для быстрого доступа к функциональности.
Публичные методы
EvmNative(string rpc, string address)
Возвращает: decimal - баланс в читаемом формате
Описание: Статический метод для получения баланса нативной валюты EVM-блокчейна с автоматическим преобразованием в decimal.
Описание: Конвертирует сумму в USD в количество токенов по текущему курсу через выбранный API.
Параметры:
usdAmount - сумма в долларах для конвертации
tiker - тикер криптовалюты
apiProvider - источник цен (KuCoin, OKX, CoinGecco)
Пример:
C#:
//конвертировать $100 в ETH по курсу KuCoin
decimal ethAmount = project.UsdToToken(100m, "ETH", "KuCoin"); project.SendInfoToLog($"$100 = {ethAmount} ETH", false);
Wallets
Набор для управления кошельками через браузерные расширения. Включает поддержку Backpack (Solana/Ethereum), Keplr (Cosmos ) и Zerion (Solana/Ethereum) с возможностями установки, импорта кошельков, разблокировки, подписания транзакций, переключения между сетями и мониторинга состояния операций.
BackpackWallet
Класс для автоматизации работы с кошельком Backpack в браузере Chrome. Обеспечивает установку, импорт, разблокировку и управление кошельком через расширение браузера.
Конструкторы
BackpackWallet(IZennoPosterProjectModel project, Instance instance, bool log = false, string key = null, string fileName = "Backpack0.10.94.crx")
Создает новый экземпляр класса для работы с кошельком Backpack.
Параметры:
project - экземпляр проекта ZennoPoster
instance - экземпляр браузера
log - включить логирование (по умолчанию false)
key - приватный ключ или seed фраза ("key", "seed" или конкретный ключ)
fileName - имя файла расширения (по умолчанию "Backpack0.10.94.crx")
Пример:
C#:
var wallet = new BackpackWallet(project, instance, log: true, key: "key"); //создать экземпляр с логированием и ключом из базы данных
Методы
Launch(string fileName = null, bool log = false) : string
Запускает кошелек Backpack, устанавливает расширение и импортирует/разблокирует кошелек.
Возвращает: Адрес активного кошелька
Параметры:
fileName - имя файла расширения (необязательно)
log - включить логирование (по умолчанию false)
Пример:
C#:
string address = wallet.Launch(log: true); project.SendInfoToLog($"Адрес кошелька: {address}");
//запустить кошелек и получить адрес
ActiveAddress(bool log = false) : string
Получает адрес текущего активного кошелька.
KeplrWallet
Класс KeplrWallet предоставляет инструменты для автоматизации работы с криптокошельком Keplr через браузерное расширение. Позволяет устанавливать расширение, импортировать кошельки, управлять ими и подписывать транзакции.
Конструкторы
KeplrWallet(IZennoPosterProjectModel, Instance, bool, string, string)
Инициализирует новый экземпляр класса KeplrWallet для работы с кошельком Keplr.
Параметры:
project (IZennoPosterProjectModel) - проект ZennoPoster
instance (Instance) - экземпляр браузера
log (bool) - включить логирование (по умолчанию false)
key (string) - приватный ключ (опционально)
seed (string) - мнемоническая фраза (опционально)
Пример:
C#:
// инициализация KeplrWallet с логированием
var keplrWallet = new KeplrWallet(project, instance, log: true);
//отправить информацию в лог
Публичные методы
Launch(string, string, bool)
Возвращаемое значение: void
Запускает расширение Keplr, устанавливает его при необходимости и импортирует кошелек из указанного источника.
Параметры:
source (string) - источник для импорта ("seed" или "keyEvm", по умолчанию "seed")
fileName (string) - имя файла расширения (опционально, по умолчанию используется встроенное значение)
log (bool) - включить логирование (по умолчанию false)
Пример:
C#:
// запуск Keplr с импортом из seed-фразы
keplrWallet.Launch("seed", log: true);
//отправить информацию в лог
Устанавливает активный источник кошелька в Keplr. Автоматически управляет импортированными кошельками и переключается на нужный.
Параметры:
source (string) - источник кошелька ("seed" или "keyEvm")
log (bool) - включить логирование (по умолчанию false)
Пример:
C#:
// переключение на кошелек из приватного ключа
keplrWallet.SetSource("keyEvm", log: true);
//отправить информацию в лог
Unlock(bool)
Возвращаемое значение: void
Разблокирует кошелек Keplr, вводя пароль. Автоматически определяет, нужна ли разблокировка.
Параметры:
log (bool) - включить логирование (по умолчанию false)
Пример:
C#:
// разблокировка кошелька
keplrWallet.Unlock(log: true);
//отправить информацию в лог
Sign(bool)
Возвращаемое значение: void
Подписывает транзакцию в Keplr, ожидая появления окна подтверждения и автоматически нажимая кнопку "Approve".
Параметры:
log (bool) - включить логирование (по умолчанию false)
Пример:
C#:
// подписание транзакции
keplrWallet.Sign(log: true);
//отправить информацию в лог
KeplrApprove(bool)
Возвращаемое значение: string
Устаревший метод для подписания транзакций. Рекомендуется использовать метод Sign().
Параметры:
log (bool) - включить логирование (по умолчанию false)
Пример:
C#:
// использование устаревшего метода (не рекомендуется)
string result = keplrWallet.KeplrApprove(log: true);
//отправить предупреждение в лог
project.SendWarningToLog("Используется устаревший метод KeplrApprove");
ZerionWallet
Класс для автоматизации кошелька Zerion в браузерных скриптах. Позволяет устанавливать расширение, импортировать кошельки по приватному ключу или мнемонике, подписывать транзакции и проверять доступные для получения награды.
Конструктор
ZerionWallet(project, instance, log, key, fileName)
Создает новый экземпляр класса для работы с кошельком Zerion.
Параметры:
project (IZennoPosterProjectModel) - текущий проект
instance (Instance) - экземпляр браузера
log (bool) - включить логирование (по умолчанию false)
key (string) - ключ кошелька ("key", "seed" или прямое значение, по умолчанию "key")
fileName (string) - имя файла расширения (по умолчанию "Zerion1.21.3.crx")
Пример:
C#:
var wallet = new ZerionWallet(project, instance, log: true);
Методы
Launch(fileName, log, source, refCode)
Возвращает: string - адрес активного кошелька
Устанавливает расширение Zerion, импортирует кошелек и подготавливает его к использованию. Автоматически определяет состояние кошелька и выполняет необходимые действия для полной настройки.
Параметры:
fileName (string) - имя файла расширения (необязательно)
log (bool) - включить логирование (по умолчанию false)
source (string) - источник ключа ("key" или "seed", по умолчанию "key")
refCode (string) - реферальный код (необязательно)
Пример:
C#:
//запустить кошелек с основным ключом
string address = wallet.Launch(); project.SendInfoToLog($"Кошелек запущен: {address}");
//запустить с реферальным кодом
string address = wallet.Launch(refCode: "ABC123"); project.SendInfoToLog($"Кошелек запущен с рефералом: {address}");
Sign(log, deadline)
Возвращает: bool - true если транзакция успешно подписана
Подписывает транзакцию или сообщение в кошельке Zerion. Автоматически находит кнопки "Confirm" или "Sign" и нажимает их.
Параметры:
log (bool) - включить логирование (по умолчанию false)
deadline (int) - максимальное время ожидания в секундах (по умолчанию 10)
Пример:
C#:
//подписать транзакцию
bool success = wallet.Sign(); if (success) { }
//подписать с увеличенным временем ожидания
bool success = wallet.Sign(deadline: 30);
Connect(log)
Подключает кошелек к веб-сайту. Автоматически обрабатывает процесс подключения, включая добавление сайта в список доверенных и подтверждение подключения.
Параметры:
log (bool) - включить логирование (по умолчанию false)
Пример:
C#:
//подключить кошелек к сайту
wallet.Connect();
SwitchSource(addressToUse)
Переключает активный адрес кошелька на указанный источник.
Параметры:
addressToUse (string) - источник адреса ("key" для основного ключа, "seed" для мнемоники, по умолчанию "key")
Пример:
C#:
//переключиться на основной ключ
wallet.SwitchSource("key");
//переключиться на адрес из мнемоники
wallet.SwitchSource("seed");
WaitTx(deadline, log)
Возвращает: bool - true если транзакция успешна, false если неудачна
Ожидает завершения транзакции в истории кошелька. Проверяет статус последней транзакции до её завершения.
Параметры:
deadline (int) - максимальное время ожидания в секундах (по умолчанию 60)
log (bool) - включить логирование (по умолчанию false)
Пример:
C#:
//дождаться завершения транзакции
bool success = wallet.WaitTx(); if (success) { } else { project.SendErrorToLog("Транзакция не удалась");
}
Claimable(address)
Возвращает: List - список ID доступных для получения наград
Получает список квестов и наград, доступных для получения по указанному адресу через API Zerion.
Параметры:
address (string) - адрес кошелька для проверки
Пример:
C#:
//получить список доступных наград
var rewards = wallet.Claimable("0x742d35Cc6634C0532925a3b8D46d07c30e5b7A0c"); foreach (string rewardId in rewards) { project.SendInfoToLog($"Доступна награда: {rewardId}");
}
ActiveAddress()
Возвращает: string - адрес активного кошелька
Получает адрес текущего активного кошелька в расширении Zerion.
Некоторые функции библиотеки расчитаны на определенный формат хранения данных - получить базу с таковым форматом можно с помощью шаблона DbBuilder - в настройках нужно выбрать тип базы данных (SQLite/Postgre).
Функции шифрования подгружаются в память перед загрузкой проекта из шаблона _SAFU - в шаблоне хранится ключи.
После сохранения ключа в шаблоне нужно снять галку с allusers в разделе "шифрование" и переименовать в _SAFU.zp
Launcher - создает в бд новую таблицу основываясь на настройках выбирает аккаунт по определенным фильтрам и запускает браузер, подгоняя некоторые параметры для лучшей анонимности скора у сканнеров и запускает проект.
новичку можно пользоваться базовыми функциями, если новичок вообще работает со сниппетами.
вызовы для действий в браузере адаптируются к данным которые выдает конвертор зеннпостер.
То есть результат конвертирования допустим такой:
C#:
// Конструктор действий, тип RiseEvent
HtmlElement he = instance.ActiveTab.FindElementByAttribute("button", "innertext", "Zerion", "regexp", 0);
if (he.IsVoid) return -1;
// Задержка эмуляции
instance.WaitFieldEmulationDelay();
// Вызвать событие "click"
he.RiseEvent("click", instance.EmulationLevel);
тогда мы берем селектор который выбрал нам конвертор ("button", "innertext", "Zerion", "regexp", 0) и вствляем его в функцию
Это больше для удобства и сокращения времени на написание кода. Новичку для начала надо основы освоить, а потом в код переходить. Ну или почитать статьи других конкурсов где есть про использование кода, всплывающих подсказок и т.п. и тогда станет понятнее как использовать этот мультитул, ну или написать свой
Последний раз когда тестил - в ZB не работал функционал связанный с куками и расширениями - сейчас точно не скажу. Так же не работал функционал выправки параметров видео отпечатка (webgl)
Не работаю в js, но часто здесь пишут, что он очень много ресурсов пк на себя берёт. Что по нагрузке с этими кликами?
Через js стабильнее клики чем родными C# методами?
Есть преимущества над родными методами C#?
Я впервые слышу что JS берет на себя много ресурсов - на мой взгляд к реальности это утверждение отношения не имеет никакого .
По нагрузке большой разницы не будет и неизвестнтно в какую сторону она будет вообще.
Преимущества - как миниум можно тыкать по shadow root (открытым)
Но всё же мой вопрос больше про клики, а не про сравнение js и C#.
Пообщался с gpt, упрощённо он пишет, что C# методы в ZP эмулируют действия пользователя, а простые клики js это просто автоматические клики, и любая антифрод система их отследит.
gpt я на слово не верю (уже давно) вот пытаюсь уточнить у того, кто реально этим пользуется.
Но всё же мой вопрос больше про клики, а не про сравнение js и C#.
Пообщался с gpt, упрощённо он пишет, что C# методы в ZP эмулируют действия пользователя, а простые клики js это просто автоматические клики, и любая антифрод система их отследит.
gpt я на слово не верю (уже давно) вот пытаюсь уточнить у того, кто реально этим пользуется.
в данном случае это простые клики вызываемые чезез EvaluateScript из штатного C# api
ничем не прикрытые - как с отключенной эмуляцией мыши (котороая, кстати, жрет ресурсов как не в себя) в Zennoposter.
В данной сборке JsClick - (впрочем как и остальной функционал вызывающий JS код) - это костыли которые помогают делать то, что не получается с помощью C#. В моих сценариях данный метод я использую когда мне нужно работать с ShadowRoot элементами. В дефолтных ситуациях использовать C# в зенке удобнее и прогматичнее.
в данном случае это простые клики вызываемые чезез EvaluateScript из штатного C# api
ничем не прикрытые - как с отключенной эмуляцией мыши (котороая, кстати, жрет ресурсов как не в себя) в Zennoposter.
В данной сборке JsClick - (впрочем как и остальной функционал вызывающий JS код) - это костыли которые помогают делать то, что не получается с помощью C#. В моих сценариях данный метод я использую когда мне нужно работать с ShadowRoot элементами. В дефолтных ситуациях использовать C# в зенке удобнее и прогматичнее.
Я реализацию JsClick на github смотрел, а обёрток над методами кликов C# в библиотеке не нашёл, поэтому и подумал, что пользуете только JsClick.
Теперь понятно, спасибо за ответ
Я реализацию JsClick на github смотрел, а обёрток над методами кликов C# в библиотеке не нашёл, поэтому и подумал, что пользуете только JsClick.
Теперь понятно, спасибо за ответ
instance.GetHe(); //найти he
instance.HeGet(); //взять иннертекст (по умолчанию ) или что-то иное по параметрам
instance.HeClick(); //клик
instance.HeSet(); //установить значение
Я пытаюсь понять, какой лучше использовать.
Кубик клика зенки конвертируется именно в he.RiseEvent, но в документации по обновлениям фигурируют только FullEmulationMouse, впечатление такое что на he.RiseEvent() забили, хотя может тоже плохо искал, как и с кликом в вашей библиотеке
Я пытаюсь понять, какой лучше использовать.
Кубик клика зенки конвертируется именно в he.RiseEvent, но в документации по обновлениям фигурируют только FullEmulationMouse, впечатление такое что на he.RiseEvent() забили, хотя может тоже плохо искал, как и с кликом в вашей библиотеке
это разные медоты с разными плоскостями применения
- первый это обработка элемента - то есть клик применяется к чему-то (тому, что нашел макрос по предоставленными селекторам)
- второе это просто вызов события - сферический клик в вакуме по неким координатам или объекту
это разные медоты с разными плоскостями применения
- первый это обработка элемента - то есть клик применяется к чему-то (тому, что нашел макрос по предоставленными селекторам)
- второе это просто вызов события - сферический клик в вакуме по неким координатам или объекту
Работу я понимаю, в втором случае можно получить координаты элемента, из них взять рандомную точку и передать в .FullEmulationMouseClick(x, y), или же перед кликом использовать .FullEmulationMouseMoveToHtmlElement(he)
Но вот не понимаю как это выглядит для сайта.
Уровень эмуляции самого курсора на сайте будет разным между he.RiseEvent() и tab.FullEmulationMouseClick() или одинаковым?
Исходный код в библиотеках Zenno не посмотреть, может he.RiseEvent() просто обёртка над FullEmulationMouseClick() с похожей логикой, что я выше указал, а может это абсолютно разные методы, с разным уровнем эмуляции.
Классная библиотека, но трудно с ней освоиться.... Мне кажется, очень помог бы какой-то небольшой проект, который её использует. Просто погонять его и загрузить в голову классы и методы. Ну и ссылка на репозиторий изменилась.
Классная библиотека, но трудно с ней освоиться.... Мне кажется, очень помог бы какой-то небольшой проект, который её использует. Просто погонять его и загрузить в голову классы и методы. Ну и ссылка на репозиторий изменилась.
https://t.me/w3blab/136 тут можете скачать примеры шаблонов
На z3nCore ссылка та же — я сделал новый репо z3n7, потому что не хотел продолжать поддержку некоторых вещей, сделанных не очень прагматично, с точки зрения меня текущего, костылями для адаптации к моей следующей разработке (90% кода осталось тем же но 10% были несовместимы)