Исходник [RakSamp Lite] Advanced API for samp-store

Ulong

Диванный критик
Автор темы
Проверенный
60
325
Модуль для более комфортной работы с максимально удобной площадкой samp-store. Короче полноценный парсер на луа
Позволяет смотреть каталог аккаунтов, каталог покупок, покупать аккаунты, выставлять аккаунты без нужды в дополнительном подтверждении через чекер




Необходимые библиотеки для работы (переместить по пути /scripts/libs/):
  • requests (вместе уже идут либы cjson, base64, md5)
  • encoding (НУЖНЫ ТОЛЬКО encoding.lua и iconv.dll ИЗ ПАПКИ /moonloader/lib/)
  • htmlparser
Минусы:
  • Зависимость от rucaptcha (придётся тратить ~0.16 руб. каждые 10 дней для решения рекапчи)
  • Синхронные запросы
Установка:
  • Установить требуемые библиотеки
  • Закинуть ss_api.lua по пути /scripts/libs/



Важно! Перед началом использования вам нужен аккаунт в сервисе решения капчи - rucaptcha.com
После регистрации необходимо пополнить баланс (50 руб. достаточно) и после найти API KEY, который находится во вкладке «Настройки аккаунта» - rucaptcha.com/setting




Функции:

module.initSession(login, password, rucaptcha_api_key)
  • Функция для инициализации сессии на samp-store. Требует логин, пароль от samp-store и так же API KEY от сервиса rucaptcha
    Возвращает true при успешной авторизации, false при ошибке
    После авторизации создаётся cookie файл в корневой папке бота, сессия будет активна 10 дней
    Для проверки на инициализацию и валидность cookie есть две функции - isSessionInit() и isValidSession() соответственно
Аргументы функции
login
логин (email) от samp-store​
password
пароль от samp-store​
rucaptcha_api_key
API KEY от сервиса rucaptcha​
Lua:
local store = require("ss_api")
local res, msg = store.initSession("login@site.com", "password", "RUCAPTCHA_API_KEY")
print(string.format("Authorization %s. Message: %s", res and "OK" or "ERROR", msg))





module.parseCatalog(details)
  • Функция для просмотра каталога с аккаунтами. Есть возможность передавать необходимые фильтры в details для более точечной выборки
    Необязательно передавать в details все возможные аргументы
    Возвращает массив с аккаунтами из каталога в случае успеха
Аргументы функции
details
sort​
сортировка
0 - по дате от новых к старым
1 - по дате от старых в новым
2 - от дорогих к дешевым
3 - от дешевых к дорогим​
page​
страница поиска 1-100​
search​
произвольный поиск​
price1​
цена ОТ​
price2​
цена ДО​
level1​
уровень ОТ​
level2​
уровень ДО​
money1​
деньги ОТ​
money2​
деньги ДО​
pr​
без привязок
указывать "on", если нужны
аккаунты только без привязок​
rg​
рег. данные
указывать "on", если нужны
аккаунты только с рег. данными​
kpz​
без кпз
указывать "on", если нужны
аккаунты без кпз​
id​
ID продавца​

Если требуется осуществить поиск на определенном сервере,
то нужно передавать его сокращенное название
Сокращенные названия серверов - КАРТИНКА
Передавать в массиве нужно по примеру: ['arrp1'] = 'on'
Lua:
local res, data = store.parseCatalog(
    {
        ['sort'] = '0',
        ['page'] = '1',
        ['arrp1'] = 'on',
        ['arrp5'] = 'on',
        ['search'] = '',
        ['price1'] = '',
        ['price2'] = '',
        ['level1'] = '',
        ['level2'] = '',
        ['money1'] = '',
        ['money2'] = '',
        ['pr'] = 'on'
    }
)
if res then
    for key, value in ipairs(data) do
        print(string.format("ACC_ID %d | Server %s | Skin %d | \
        Score %d | Cash %s | Mail %s | Price %d | \
        Seller %s | SellerRep %d",
            value.account_id,
            value.server_name,
            value.account_skin,
            value.account_score,
            value.account_cash,
            value.account_email,
            value.account_price,
            value.seller,
            value.seller_rep
        ))
    end
else
    print(string.format("parseCatalog error! Error: %s", data))
end





module.parsePurchases(details)
  • Функция для просмотра своих покупок. Есть возможность передавать необходимые фильтры в details для более точечной выборки
    Необязательно передавать в details все возможные аргументы
    Возвращает массив с аккаунтами из списка покупок в случае успеха
Аргументы функции
details
sort​
сортировка
0 - По дате от новых к старым
1 - По дате от старых в новым
2 - от дорогих к дешевым
3 - от дешевых к дорогим​
page​
страница поиска 1-100​
search​
произвольный поиск​
price1​
цена ОТ​
price2​
цена ДО​
level1​
уровень ОТ​
level2​
уровень ДО​
money1​
деньги ОТ​
money2​
деньги ДО​
pr​
без привязок
указывать "on", если нужны
аккаунты только без привязок​
rg​
рег. данные
указывать "on", если нужны
аккаунты только с рег. данными​
kpz​
без кпз
указывать "on", если нужны
аккаунты без кпз​
status​
статус
0 - все аккаунты
1 - ожидают подтверждения
2 - проверяются ботом​

Если требуется осуществить поиск на определенном сервере,
то нужно передавать его сокращенное название
Сокращенные названия серверов - КАРТИНКА
Передавать в массиве нужно по примеру: ['arrp1'] = 'on'
Lua:
local res, data = store.parsePurchases(
    {
        ['sort'] = '0',
        ['search'] = '',
        ['price1'] = '',
        ['price2'] = ''
    }
)
if res then
    for key, value in ipairs(data) do
        print(string.format("ACC_ID %d | Server %s | Skin %d | \
        Score %d | Cash %s | Mail %s | Price %d | \
        Seller %s | SellerRep %d",
            value.account_id,
            value.server_name,
            value.account_skin,
            value.account_score,
            value.account_cash,
            value.account_email,
            value.account_price,
            value.seller,
            value.seller_rep
        ))
    end
else
    print(string.format("parsePurchases error! Error: %s", data))
end





module.getAccountInfo()
  • Функция для получения данных про ваш аккаунт samp-store
    Возвращает API ключ, никнейм, баланс, замороженный баланс в случае успеха

Аргументы функции
не требуются​
для данной функции нет аргументов​
Lua:
local res, data = store.getAccountInfo()
if res then
	print(string.format("User %s | API_KEY %s | Balance %d | Hold balance %d", 
		data.user, 
		data.api_key, 
		data.balance, 
		data.hold
	))
else
	print(string.format("getAccountInfo error! Error: %s", data))
end





module.parseAccount(store_id)
  • Функция для просмотра информации об аккаунте
    Возвращает массив с данными в случае успеха
    Дополнительно возвращает login, password, reg_ip, code если аккаунт куплен вами
    Дополнительно возвращает price если этот аккаунт выставлен на продажу

Аргументы функции
store_id
идентификационный номер аккаунта​
Lua:
local res, data = store.parseAccount(228)
if res then
	--[[
		возвращает массив:
		score
		cash
		phone
		email
		vk
		reg
		skin
		server
		seller
		seller_rep
		login
		password
		reg_ip
		code
		price
	--]]
	print(string.format("Score %d", data.score))
	print(string.format("Skin %d", data.skin))
	print(string.format("Seller %s", data.seller))
else
	print(string.format("parseAccount error! Error: %s", data))
end





module.buyAccount(store_id)
  • Функция для покупки аккаунта на площадке. Покупка обычно занимает от 30 до 120 секунд в зависимости от нагруженности чекера
    Возвращает массив с данными в случае успеха

Аргументы функции
store_id
идентификационный номер аккаунта​
Lua:
local res, data = store.buyAccount(228)
if res then
	--[[
		возвращает массив:
		score
		cash
		phone
		email
		vk
		reg
		skin
		server
		seller
		seller_rep
		login
		password
		reg_ip
		code
		price
	--]]
	print("Successful buy!")
	print(string.format("Login %s", data.login))
	print(string.format("Pass %s", data.password))
	print(string.format("RegIP %s", data.reg_ip))
	print(string.format("SecCode %s", data.code))
else
	print(string.format("buyAccount error! Error: %s", data))
end





module.uploadAccount(main, stats, business, cars, houses, licenses, skills, inventory)
  • Функция для загрузки и выставления аккаунта на продажу
    Функция имеет как обязательные аргументы, так и те, которые можно не передавать
    Автоматически подтверждает аккаунт без необходимости проверять через чекер
    Возвращает идентификационный номер загруженного аккаунта в случае успеха

Аргументы функции
main (обязательный)
server​
IP:PORT сервера​
price​
цена в рублях​
reg​
рег. данные (IP only)
(можно оставить поле пустым)​
code​
код безопасности
(можно оставить поле пустым)​
skin​
ID скина​
mob​
привязка мобильника
(0 - нет привязки, 1 - есть)​
email​
привязка email
(0 - нет привязки, 1 - есть)​
lvl​
уровень​
money​
деньги​
alogin​
ник​
password​
пароль​
info​
инфа после покупки
(можно оставить поле пустым)​
tittle​
заголовок
(можно оставить поле пустым)​
stats
статистика аккаунта
вложенная таблица с полями name и value
name - название столбца
value - значение столбца​
business
таблица с перечислением бизнесов​
cars
таблица с перечислением машин​
houses
таблица с перечислением домов​
licenses
лицензии
вложенная таблица с полями name и value
name - название лицении
value - значение​
skills
скиллы оружия
вложенная таблица с полями name и value
name - название оружия
value - значение (от 0 до 100)​
inventory
таблица с перечислением содержимого инвентаря​
СКРИН что получится на выходе
Lua:
local res, acc_id = store.uploadAccount(
	{
		["server"] = "80.66.82.144:7777",
		["price"] = 300,
		["reg"] = "127.0.0.1",
		["code"] = "",
		["skin"] = 78,
		["mob"] = 0,
		["email"] = 0,
		["lvl"] = 5,
		["money"] = 5000000,
		["alogin"] = "Test_Test",
		["password"] = "123456789",
		["info"] = "",
		["tittle"] = "Тестовое описание"
	}, 
	{
		{name = "Уровень", value = 5},
		{name = "Наличные деньги", value = 500000},
		{name = "Деньги в банке", value = 50000000},
		{name = "Номер телефона", value = 666666},
		{name = "Предупреждения", value = 0},
		{name = "Пол", value = "Мужчина"},
		{name = "Уровень розыска", value = 0},
		{name = "Организация", value = "LSPD"},
		{name = "Ранг", value = "Рядовой"}
	},
	{
		"Продуктовый магазин №17", 
		"АЗС №55"
	},
	{
		"Infernus", 
		"SandKing", 
		"Faggio"
	},
	{
		"Дом 171"
	},
	{
		{name = "Лицензия на авто", value = "Нет"},
		{name = "Лицензия на мото", value = "Есть"},
		{name = "Лицензия на полёты", value = "Есть"}
	},
	{
		{name = "Pistol", value = "0"},
		{name = "Silenced Pistol", value = "0"},
		{name = "Desert Eagle", value = "0"},
		{name = "ShotGun", value = "0"},
		{name = "SawnOff ShotGun", value = "0"},
		{name = "SPAS12 ShotGun", value = "0"},
		{name = "Micro UZI", value = "0"},
		{name = "MP5", value = "0"},
		{name = "AK47", value = "0"},
		{name = "M4A1", value = "0"},
		{name = "SniperRifle", value = "0"}
	},
	{
		"Ящик Пандоры", 
		"Яблочный сок"
	}
)
if res then
	print(string.format("uploadAccount OK. StoreID %d", acc_id))
else
	print(string.format("uploadAccount error! Error: %s", acc_id))
end
СКРИН что получится на выходе
Lua:
local res, acc_id = store.uploadAccount(
	{
		["server"] = "80.66.82.128:7777",
		["price"] = 2000,
		["reg"] = "",
		["code"] = "",
		["skin"] = 305,
		["mob"] = 1,
		["email"] = 1,
		["lvl"] = 20,
		["money"] = 0,
		["alogin"] = "Test_Test",
		["password"] = "987654321",
		["info"] = "Описание покупателю после покупки",
		["tittle"] = "Тестовое описание"
	}, 
	{
		{name = "Уровень", value = 20},
		{name = "Организация", value = "Нет"},
		{name = "Ранг", value = "Микрочелик"}
	},
	_,
	_,
	_,
	{
		{name = "Лицензия на авто", value = "Нет"},
		{name = "Лицензия на мото", value = "Есть"},
		{name = "Лицензия на полёты", value = "Есть"}
	},
	{
		{name = "Pistol", value = "100"},
		{name = "Silenced Pistol", value = "33"},
		{name = "Desert Eagle", value = "100"},
		{name = "ShotGun", value = "100"},
		{name = "SawnOff ShotGun", value = "0"},
		{name = "SPAS12 ShotGun", value = "0"},
		{name = "Micro UZI", value = "69"},
		{name = "MP5", value = "5"},
		{name = "AK47", value = "0"},
		{name = "M4A1", value = "100"},
		{name = "SniperRifle", value = "0"}
	},
	_
)
if res then
	print(string.format("uploadAccount OK. StoreID %d", acc_id))
else
	print(string.format("uploadAccount error! Error: %s", acc_id))
end
СКРИН что получится на выходе
Lua:
local res, acc_id = store.uploadAccount(
	{
		["server"] = "185.169.134.173:7777",
		["price"] = 777,
		["reg"] = "",
		["code"] = "",
		["skin"] = 246,
		["mob"] = 0,
		["email"] = 0,
		["lvl"] = 101,
		["money"] = 100000000,
		["alogin"] = "Test_Test",
		["password"] = "987654321",
		["info"] = "Описание покупателю после покупки",
		["tittle"] = "Тестовое описание"
	}, 
	_,
	_,
	_,
	_,
	_,
	_,
	_
)
if res then
	print(string.format("uploadAccount OK. StoreID %d", acc_id))
else
	print(string.format("uploadAccount error! Error: %s", acc_id))
end
 

Вложения

  • ss_api.lua
    26.1 KB · Просмотры: 50
Последнее редактирование: