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

274 lines
9.8 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 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