mirror of
https://github.com/shufflewzc/faker3.git
synced 2026-04-03 16:34:07 +08:00
sync
This commit is contained in:
191
magic.py
Normal file
191
magic.py
Normal file
@@ -0,0 +1,191 @@
|
||||
import asyncio
|
||||
import datetime
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import urllib.parse
|
||||
|
||||
from cacheout import FIFOCache
|
||||
from pyrogram import Client, filters
|
||||
|
||||
cache = FIFOCache(maxsize=512)
|
||||
|
||||
platform = "v4"
|
||||
if os.path.exists("/jd/config/magic.json"):
|
||||
with open("/jd/config/magic.json", 'r', encoding='utf-8') as f:
|
||||
BOT = json.load(f)
|
||||
|
||||
if os.path.exists("/ql/config/magic.json"):
|
||||
platform = "ql"
|
||||
with open("/ql/config/magic.json", 'r', encoding='utf-8') as f:
|
||||
BOT = json.load(f)
|
||||
|
||||
if os.path.exists("/ql/data/config/magic.json"):
|
||||
platform = "ql2"
|
||||
with open("/ql/data/config/magic.json", 'r', encoding='utf-8') as f:
|
||||
BOT = json.load(f)
|
||||
|
||||
api_id = int(BOT['api_id'])
|
||||
api_hash = BOT['api_hash']
|
||||
my_id = int(BOT['user_id'])
|
||||
my_bot_id = int(BOT['bot_token'].split(":")[0])
|
||||
base_path = BOT['base_path']
|
||||
|
||||
if platform == "v4":
|
||||
_ConfigSH = '/jd/config/config.sh'
|
||||
elif platform == 'ql':
|
||||
_ConfigSH = '/ql/config/config.sh'
|
||||
else:
|
||||
_ConfigSH = '/ql/data/config/config.sh'
|
||||
|
||||
if BOT['proxy']:
|
||||
proxy = {
|
||||
'hostname': BOT['proxy_add'], # 改成自己的
|
||||
'port': int(BOT['proxy_port']),
|
||||
'username': BOT['proxy_username'],
|
||||
'password': BOT['proxy_password']
|
||||
}
|
||||
app = Client('magic', api_id, api_hash, proxy=proxy)
|
||||
else:
|
||||
app = Client('magic', api_id, api_hash)
|
||||
|
||||
# 监控的自动车
|
||||
car_group_id = int(BOT['car_group_id'])
|
||||
|
||||
monitor_flag = 'https://i.walle.com/api?data='
|
||||
|
||||
# 你的脚本配置
|
||||
car_config = [
|
||||
{'name': 'M加购有礼', 'env': 'M_WX_ADD_CART_URL', 'js': 'm_jd_wx_addCart.js', 'cmd': 'now'},
|
||||
{'name': 'M幸运抽奖', 'env': 'M_WX_LUCK_DRAW_URL', 'js': 'm_jd_wx_luckDraw.js', 'cmd': 'now'},
|
||||
{'name': 'M集卡抽奖', 'env': 'M_WX_COLLECT_CARD_URL', 'js': 'm_jd_wx_collectCard.js', 'cmd': 'now'},
|
||||
{'name': 'M关注有礼', 'env': 'M_FOLLOW_SHOP_ARGV', 'js': 'm_jd_follow_shop.js', 'cmd': 'now'}
|
||||
]
|
||||
|
||||
|
||||
@app.on_message(filters.chat(my_bot_id) & filters.regex("在吗"))
|
||||
async def handler(client, message):
|
||||
await message.reply("老板啥事!")
|
||||
|
||||
|
||||
@app.on_message(filters.chat(car_group_id) & filters.text)
|
||||
async def handler(client, message):
|
||||
try:
|
||||
if message.entities is None:
|
||||
return
|
||||
text = message.entities[0]['url']
|
||||
if text is None:
|
||||
return
|
||||
if 'i.walle.com' not in text:
|
||||
return
|
||||
text = urllib.parse.unquote(text.replace(monitor_flag, ''))
|
||||
zd = 1
|
||||
if 'jd_zdjr_activityId' in text:
|
||||
zd = re.search(f'jd_zdjr_activityId="(.*)"', text)[1]
|
||||
if zd != 1:
|
||||
if cache.get(zd) is not None:
|
||||
await client.send_message(my_bot_id, f'跑过 {text}')
|
||||
return
|
||||
cache.set(zd, zd)
|
||||
else:
|
||||
if cache.get(text) is not None:
|
||||
await client.send_message(my_bot_id, f'跑过 {text}')
|
||||
return
|
||||
cache.set(text, text)
|
||||
name = ''
|
||||
js = ''
|
||||
command = ''
|
||||
for v in car_config:
|
||||
if v['env'] in text:
|
||||
name = v['name']
|
||||
js = v['js']
|
||||
command = v['cmd']
|
||||
break
|
||||
if len(name) == 0:
|
||||
await client.send_message(my_bot_id, f'未知变量`{text}`')
|
||||
return
|
||||
messages = text.split("\n")
|
||||
change = ""
|
||||
for message in messages:
|
||||
if "export " not in message:
|
||||
continue
|
||||
kv = message.replace("export ", "")
|
||||
key = kv.split("=")[0]
|
||||
value = re.findall(r'"([^"]*)"', kv)[0]
|
||||
configs = rwcon("str")
|
||||
if kv in configs:
|
||||
continue
|
||||
if key in configs:
|
||||
configs = re.sub(f'{key}=("|\').*("|\')', kv, configs)
|
||||
change += f"【替换】 `{name}` 环境变量成功\n`{kv}\n`"
|
||||
else:
|
||||
if platform == 'v4':
|
||||
end_line = 0
|
||||
configs = rwcon("list")
|
||||
for config in configs:
|
||||
if "第五区域" in config and "↑" in config:
|
||||
end_line = configs.index(config) - 1
|
||||
break
|
||||
configs.insert(end_line, f'export {key}="{value}"\n')
|
||||
else:
|
||||
configs = rwcon("str")
|
||||
configs += f'export {key}="{value}"\n'
|
||||
change += f"【新增】 `{name}` 环境变量成功\n`{kv}\n`"
|
||||
await client.send_message(my_bot_id, change)
|
||||
rwcon(configs)
|
||||
if len(change) == 0:
|
||||
await client.send_message(my_bot_id, f'【取消】{name}环境变量无需改动')
|
||||
return
|
||||
if len(js) > 0:
|
||||
await client.send_message(my_bot_id, f'开始运行 {js}')
|
||||
if platform == 'v4':
|
||||
await cmd(client, f'jtask {base_path}/{js} {command}')
|
||||
else:
|
||||
await cmd(client, f'task {base_path}/{js} {command}')
|
||||
else:
|
||||
await client.send_message(my_bot_id, f'无需执行')
|
||||
except Exception as e:
|
||||
await client.send_message(my_bot_id, f'{str(e)}')
|
||||
|
||||
|
||||
async def cmd(client, cmd_text):
|
||||
'''定义执行cmd命令'''
|
||||
try:
|
||||
p = await asyncio.create_subprocess_shell(
|
||||
cmd_text, stdout=asyncio.subprocess.PIPE,
|
||||
stderr=asyncio.subprocess.PIPE)
|
||||
res_bytes, res_err = await p.communicate()
|
||||
res = res_bytes.decode('utf-8')
|
||||
if len(res) > 0:
|
||||
if platform == "v4":
|
||||
base = "/jd"
|
||||
elif platform == "ql":
|
||||
base = "/ql"
|
||||
else:
|
||||
base = "/ql/data"
|
||||
tmp_log = f'{base}/log/bot/{cmd_text.split("/")[-1].split(".js")[0]}-{datetime.datetime.now().strftime("%H-%M-%S.%f")}.log'
|
||||
with open(tmp_log, 'w+', encoding='utf-8') as f:
|
||||
f.write(res)
|
||||
except Exception as e:
|
||||
await client.send_message(my_bot_id, f'日志目录有误,{str(e)}')
|
||||
|
||||
|
||||
# 读写config.sh
|
||||
def rwcon(arg):
|
||||
if arg == "str":
|
||||
with open(_ConfigSH, 'r', encoding='utf-8') as f1:
|
||||
configs = f1.read()
|
||||
return configs
|
||||
elif arg == "list":
|
||||
with open(_ConfigSH, 'r', encoding='utf-8') as f1:
|
||||
configs = f1.readlines()
|
||||
return configs
|
||||
elif isinstance(arg, str):
|
||||
with open(_ConfigSH, 'w', encoding='utf-8') as f1:
|
||||
f1.write(arg)
|
||||
elif isinstance(arg, list):
|
||||
with open(_ConfigSH, 'w', encoding='utf-8') as f1:
|
||||
f1.write("".join(arg))
|
||||
|
||||
|
||||
app.run()
|
||||
Reference in New Issue
Block a user