small-package/luci-app-ttnode/root/usr/share/ttnode/ttnode.lua

274 lines
9.8 KiB
Lua
Raw Normal View History

2021-09-24 23:37:27 +08:00
-- Copyright (C) 2020 jerrykuku <jerrykuku@gmail.com>
-- Licensed to the public under the GNU General Public License v3.
package.path = package.path .. ';/usr/share/ttnode/?.lua'
local uci = require 'luci.model.uci'.cursor()
local config = 'ttnode'
local requests = require('requests')
local BASE_URL = 'http://tiantang.mogencloud.com/web/api/'
local BASE_API = 'http://tiantang.mogencloud.com/api/v1/'
local xformHeaders = {['Content-Type'] = 'application/x-www-form-urlencoded'}
local sckey = uci:get_first(config, 'global', 'serverchan')
local tg_token = uci:get_first(config, 'global', 'tg_token')
local tg_userid = uci:get_first(config, 'global', 'tg_userid')
local token = uci:get_first(config, 'global', 'token')
local auto_cash = uci:get_first(config, 'global', 'auto_cash')
local week = uci:get_first(config, 'global', 'week')
local ttnode = {}
local msg = ''
local total = 0
local msgTitle = '[甜糖星愿]星愿日结详细'
-- BASE Function --
function print_r(t)
local print_r_cache = {}
local function sub_print_r(t, indent)
if (print_r_cache[tostring(t)]) then
print(indent .. '*' .. tostring(t))
else
print_r_cache[tostring(t)] = true
if (type(t) == 'table') then
for pos, val in pairs(t) do
if (type(val) == 'table') then
print(indent .. '[' .. pos .. '] => ' .. tostring(t) .. ' {')
sub_print_r(val, indent .. string.rep(' ', string.len(pos) + 8))
print(indent .. string.rep(' ', string.len(pos) + 6) .. '}')
elseif (type(val) == 'string') then
print(indent .. '[' .. pos .. '] => "' .. val .. '"')
else
print(indent .. '[' .. pos .. '] => ' .. tostring(val))
end
end
else
print(indent .. tostring(t))
end
end
end
if (type(t) == 'table') then
print(tostring(t) .. ' {')
sub_print_r(t, ' ')
print('}')
else
sub_print_r(t, ' ')
end
print()
end
function sleep(n)
os.execute('sleep ' .. n)
end
--APIS--
--发送消息到Server酱 和 Telegram
function ttnode.sendMsg(text, desp)
if sckey:len() > 0 then
local url = 'https://sc.ftqq.com/' .. sckey .. '.send'
local data = 'text=' .. text .. '&desp=' .. desp
response = requests.post {url, data = data, headers = xformHeaders}
end
if tg_token:len() > 0 and tg_userid:len() > 0 then
local tg_url = 'https://api.telegram.org/bot' .. tg_token .. '/sendMessage'
local tg_msg = "<b>"..text.."</b>"..desp
local tg_data = 'chat_id='.. tg_userid ..'&text=' .. tg_msg .. '&parse_mode=html'
response = requests.post {tg_url, data = tg_data, headers = xformHeaders}
end
return 1
end
--获取验证码
function ttnode.getCode(phone)
url = BASE_URL .. 'login/code'
data = 'phone=' .. phone
response = requests.post {url, data = data, headers = xformHeaders}
json_body, error = response.json()
return json_body
end
-- 登录
function ttnode.login(phone, authCode)
url = BASE_URL .. 'login'
data = 'phone=' .. phone .. '&authCode=' .. authCode
response = requests.post {url, data = data, headers = xformHeaders}
json_body, error = response.json()
if json_body.errCode == 0 then
token = json_body.data.token
uci:set('ttnode', '@global[0]', 'token', token)
uci:commit('ttnode')
return true
else
return false
end
end
--甜糖用户初始化信息,可以获取待收取的推广信息数,可以获取账户星星数
function ttnode.getInitInfo()
url = BASE_URL .. 'account/message/loading'
headers = {['Content-Type'] = 'application/json', ['authorization'] = token}
response = requests.post {url, headers = headers}
json_body, error = response.json()
return json_body
end
--获取当前设备列表,可以获取待收的星星数
function ttnode.getDevices()
url = BASE_API .. 'devices?page=1&type=2&per_page=200'
headers = {['Content-Type'] = 'application/json', ['authorization'] = token}
response = requests.get {url, headers = headers}
json_body, error = response.json()
return json_body
end
--收取推广奖励星星
function ttnode.promote_score_logs(score)
if score == 0 then
msg = msg .. '\n ' .. os.date('%Y-%m-%d %H:%M:%S') .. '[推广奖励]0-🌟\n'
return
end
url = BASE_API .. 'promote/score_logs'
headers = {['Content-Type'] = 'application/json', ['authorization'] = token}
data = {score = score}
response = requests.post {url, data = data, headers = headers}
json_body, error = response.json()
if json_body.errCode ~= 0 then
msg = msg .. '\n' .. os.date('%Y-%m-%d %H:%M:%S') .. ' [推广奖励]0-🌟\n'
return
end
msg = msg .. '\n ' .. os.date('%Y-%m-%d %H:%M:%S') .. '[推广奖励]"..score.."-🌟\n'
total = total + score
return
end
--收取设备奖励
function ttnode.score_logs(device_id, score, name)
if score == 0 then
msg = msg .. '\n ' .. os.date('%Y-%m-%d %H:%M:%S') .. '[' .. name .. ']0-🌟\n'
return
end
url = BASE_API .. 'score_logs'
headers = {['Content-Type'] = 'application/json', ['authorization'] = token}
data = {device_id = device_id, score = score}
response = requests.post {url, data = data, headers = headers}
json_body, error = response.json()
if json_body.errCode ~= 0 then
msg = msg .. '\n ' .. os.date('%Y-%m-%d %H:%M:%S') .. '[' .. name .. ']0-🌟\n'
return
end
msg = msg .. '\n ' .. os.date('%Y-%m-%d %H:%M:%S') .. '[' .. name .. ']' .. score .. '-🌟\n'
total = total + tonumber(score)
return
end
--签到功能
function ttnode.sign_in()
url = BASE_URL .. 'account/sign_in'
headers = {['Content-Type'] = 'application/json', ['authorization'] = token}
response = requests.post {url, headers = headers}
json_body, error = response.json()
if json_body.errCode ~= 0 then
msg = msg .. '\n ' .. os.date('%Y-%m-%d %H:%M:%S') .. '[签到奖励]0-🌟(失败:' .. json_body.msg .. ')\n'
return
end
msg = msg .. '\n ' .. os.date('%Y-%m-%d %H:%M:%S') .. '[签到奖励]1-🌟 \n'
total = total + 1
return
end
--支付宝提现
function ttnode.withdraw_logs(bean)
local logStr = ''
url = BASE_API .. 'withdraw_logs'
score = bean.score
score = score - score % 100
real_name = bean.real_name
card_id = bean.card_id
bank_name = '支付宝'
sub_bank_name = ''
ztype = 'zfb'
if score < 1000 then
logStr = '\n' .. os.date('%Y-%m-%d %H:%M:%S') .. '[自动提现]星愿不足1000无法提现\n'
return logStr
end
data = 'score=' .. score .. '&real_name=' .. real_name .. '&card_id=' .. card_id .. '&bank_name=' .. bank_name .. '&sub_bank_name=' .. sub_bank_name .. '&type=' .. ztype
print(data)
headers = {['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8', ['authorization'] = token}
response = requests.post {url, data = data, headers = headers}
json_body, error = response.json()
if json_body.errCode ~= 0 then
print(json_body.msg .. score)
logStr = '\n' .. os.date('%Y-%m-%d %H:%M:%S') .. '[自动提现]提现失败,请关闭自动提现等待更新\n'
return logStr
end
local data = json_body.data
zfbID = data.card_id
pre = string.sub(zfbID, 1, 5)
ends = string.sub(zfbID, -5)
zfbID = pre .. '***' .. ends
logStr = '\n' .. os.date('%Y-%m-%d %H:%M:%S') .. '[自动提现]扣除' .. score .. '-🌟(' .. zfbID .. ')\n'
return logStr
end
--逻辑处理
function ttnode.startProcess()
local resObj = {}
--获取用户信息
local userData = ttnode.getInitInfo()
if userData.errCode ~= 0 then
resObj.code = 1
resObj.msg = os.date('%Y-%m-%d %H:%M:%S') .. ' authorization已经失效请重新抓包填写!'
ttnode.sendMsg(os.date('%Y-%m-%d %H:%M:%S') .. '[甜糖星愿]-Auth失效通知', resObj.msg)
return resObj
end
local inactivedPromoteScore = userData.data.inactivedPromoteScore
local accountScore = userData.data.score
--获取设备列表信息
local devices = ttnode.getDevices().data.data
msg = msg .. '\n' .. os.date('%Y-%m-%d %H:%M:%S') .. '[收益详细]\n```lua'
--收取签到收益
ttnode.sign_in()
--收取推广收益
ttnode.promote_score_logs(inactivedPromoteScore)
--收取设备收益
for _, device in pairs(devices) do
ttnode.score_logs(device.hardware_id, device.inactived_score, device.alias)
end
--自动提现
local now_week = os.date('%A')
local withdraw = ''
if week == now_week and auto_cash == '1' then
local userInfo = userData.data
local zfbList = userInfo.zfbList
if next(zfbList) == nil then
withdraw = '\n' .. os.date('%Y-%m-%d %H:%M:%S') .. '[自动提现]提现失败,请绑定支付宝账户\n'
else
local bean = {}
bean.score = userInfo.score
bean.real_name = zfbList[1].name
bean.card_id = zfbList[1].account
withdraw = ttnode.withdraw_logs(bean)
end
end
--收益统计并发送微信消息
local total_str = '\n' .. os.date('%Y-%m-%d %H:%M:%S') .. '[总共收取]' .. total .. '-🌟\n'
local nowdata = ttnode.getInitInfo()
local accountScore = nowdata.data.score
local accountScore_str = '\n' .. os.date('%Y-%m-%d %H:%M:%S') .. '[账户星星]' .. accountScore .. '-🌟\n'
local ends = '\n```\n***\n注意:以上统计仅供参考一切请以甜糖客户端APP为准'
msg = accountScore_str .. total_str .. withdraw .. msg .. ends
msgRes = ttnode.sendMsg(msgTitle, msg)
resObj.code = 0
resObj.msg = msg
resObj.msgres = msgRes
return resObj
end
return ttnode