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

Ulong

Диванный критик
Автор темы
Проверенный
95
526
Модуль для более комфортной работы с максимально удобной площадкой 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 секунд в зависимости от нагруженности чекера
    Возвращает массив с данными в случае успеха


[TH][FONT=courier new]Аргументы функции
[TABLE]
[TR]
[TD][CENTER][B]store_id[/B][/CENTER]
[CENTER]идентификационный номер аккаунта[/CENTER]
[/TH]
[/TD]

[TD]
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
[/TD]
[/TR]
[/TABLE]





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


[TR]
[TH][FONT=courier new]Аргументы функции
[/TH]
[TH][/TH]
[/TR]

[TD][TABLE]
[TR]
[TD][CENTER][B]main (обязательный)[/B][/CENTER][/TD]

[TD][CENTER][SPOILER="список аргументов"]
[TABLE]
[TR]
[TD][CENTER]server[/CENTER][/TD]

[TD][LEFT]IP:PORT сервера[/LEFT][/TD]

[TD][CENTER]price[/CENTER][/TD]

[TD][LEFT]цена в рублях[/LEFT][/TD]

[TD][CENTER]reg[/CENTER][/TD]

[TD][LEFT]рег. данные (IP only)
(можно оставить поле пустым)[/LEFT][/TD]

[TD][CENTER]code[/CENTER][/TD]

[TD][LEFT]код безопасности
(можно оставить поле пустым)[/LEFT][/TD]

[TD][CENTER]skin[/CENTER][/TD]

[TD][LEFT]ID скина[/LEFT][/TD]

[TD][CENTER]mob[/CENTER][/TD]

[TD][LEFT]привязка мобильника
(0 - нет привязки, 1 - есть)[/LEFT][/TD]

[TD][CENTER]email[/CENTER][/TD]

[TD][LEFT]привязка email
(0 - нет привязки, 1 - есть)[/LEFT][/TD]

[TD][CENTER]lvl[/CENTER][/TD]

[TD][LEFT]уровень[/LEFT][/TD]

[TD][CENTER]money[/CENTER][/TD]

[TD][LEFT]деньги[/LEFT][/TD]

[TD][CENTER]alogin[/CENTER][/TD]

[TD][LEFT]ник[/LEFT][/TD]

[TD][CENTER]password[/CENTER][/TD]

[TD][LEFT]пароль[/LEFT][/TD]

[TD][CENTER]info[/CENTER][/TD]

[TD][LEFT]инфа после покупки
(можно оставить поле пустым)[/LEFT][/TD]

[TD][CENTER]tittle[/CENTER][/TD]

[TD][LEFT]заголовок
(можно оставить поле пустым)[/LEFT][/TD]
[/SPOILER][/CENTER][/TD]
[/TR]
[TR]
[TD]
stats
[/TD]

[TD]
статистика аккаунта
вложенная таблица с полями name и value
name - название столбца
value - значение столбца​
[/TD]
[/TR]
[TR]
[TD]
business
[/TD]

[TD]
таблица с перечислением бизнесов​
[/TD]
[/TR]
[TR]
[TD]
cars
[/TD]

[TD]
таблица с перечислением машин​
[/TD]
[/TR]
[TR]
[TD]
houses
[/TD]

[TD]
таблица с перечислением домов​
[/TD]
[/TR]
[TR]
[TD]
licenses
[/TD]

[TD]
лицензии
вложенная таблица с полями name и value
name - название лицении
value - значение​
[/TD]
[/TR]
[TR]
[TD]
skills
[/TD]

[TD]
скиллы оружия
вложенная таблица с полями name и value
name - название оружия
value - значение (от 0 до 100)​
[/TD]
[/TR]
[TR]
[TD]
inventory
[/TD]

[TD]
таблица с перечислением содержимого инвентаря​
[/TD]
[/TR]
[/TABLE][/TD]

[TD]
[URL='https://i.imgur.com/ikGjcuc.png']СКРИН что получится на выходе[/URL]
[CODE lang="lua" highlight="1"]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[/CODE]
[URL='https://i.imgur.com/iuS0Bvr.png']СКРИН что получится на выходе[/URL]
[CODE lang="lua" highlight="1"]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[/CODE]
[URL='https://i.imgur.com/4UXiX3X.png']СКРИН что получится на выходе[/URL]
[CODE lang="lua" highlight="1"]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[/CODE]
[/TD]
[/TR]
[/TABLE]
[/font][/font][/size][/font][/size][/font]
 

Вложения

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