解决打招呼消息的bug
This commit is contained in:
42
.idea/workspace.xml
generated
42
.idea/workspace.xml
generated
@@ -6,7 +6,9 @@
|
|||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="eceeff5e-51c1-459c-a911-d21ec090a423" name="Changes" comment="ai 开始测试">
|
<list default="true" id="eceeff5e-51c1-459c-a911-d21ec090a423" name="Changes" comment="ai 开始测试">
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/Entity/Variables.py" beforeDir="false" afterPath="$PROJECT_DIR$/Entity/Variables.py" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/Module/DeviceInfo.py" beforeDir="false" afterPath="$PROJECT_DIR$/Module/DeviceInfo.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/Module/DeviceInfo.py" beforeDir="false" afterPath="$PROJECT_DIR$/Module/DeviceInfo.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/Module/FlaskService.py" beforeDir="false" afterPath="$PROJECT_DIR$/Module/FlaskService.py" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
@@ -34,6 +36,9 @@
|
|||||||
<component name="Git.Settings">
|
<component name="Git.Settings">
|
||||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||||
</component>
|
</component>
|
||||||
|
<component name="HighlightingSettingsPerFile">
|
||||||
|
<setting file="file://$PROJECT_DIR$/build.bat" root0="SKIP_INSPECTION" />
|
||||||
|
</component>
|
||||||
<component name="ProjectColorInfo">{
|
<component name="ProjectColorInfo">{
|
||||||
"customColor": "",
|
"customColor": "",
|
||||||
"associatedIndex": 5
|
"associatedIndex": 5
|
||||||
@@ -73,7 +78,7 @@
|
|||||||
<recent name="E:\Code\python\iOSAI" />
|
<recent name="E:\Code\python\iOSAI" />
|
||||||
</key>
|
</key>
|
||||||
</component>
|
</component>
|
||||||
<component name="RunManager" selected="Python.Main">
|
<component name="RunManager">
|
||||||
<configuration name="Main" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
|
<configuration name="Main" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
|
||||||
<module name="iOSAI" />
|
<module name="iOSAI" />
|
||||||
<option name="ENV_FILES" value="" />
|
<option name="ENV_FILES" value="" />
|
||||||
@@ -83,6 +88,7 @@
|
|||||||
<env name="PYTHONUNBUFFERED" value="1" />
|
<env name="PYTHONUNBUFFERED" value="1" />
|
||||||
</envs>
|
</envs>
|
||||||
<option name="SDK_HOME" value="" />
|
<option name="SDK_HOME" value="" />
|
||||||
|
<option name="SDK_NAME" value="Python 3.12" />
|
||||||
<option name="WORKING_DIRECTORY" value="" />
|
<option name="WORKING_DIRECTORY" value="" />
|
||||||
<option name="IS_MODULE_SDK" value="false" />
|
<option name="IS_MODULE_SDK" value="false" />
|
||||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||||
@@ -97,34 +103,6 @@
|
|||||||
<option name="INPUT_FILE" value="" />
|
<option name="INPUT_FILE" value="" />
|
||||||
<method v="2" />
|
<method v="2" />
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration name="tidevice_entry" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
|
||||||
<module name="iOSAI" />
|
|
||||||
<option name="ENV_FILES" value="" />
|
|
||||||
<option name="INTERPRETER_OPTIONS" value="" />
|
|
||||||
<option name="PARENT_ENVS" value="true" />
|
|
||||||
<envs>
|
|
||||||
<env name="PYTHONUNBUFFERED" value="1" />
|
|
||||||
</envs>
|
|
||||||
<option name="SDK_HOME" value="" />
|
|
||||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
||||||
<option name="IS_MODULE_SDK" value="true" />
|
|
||||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
|
||||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
|
||||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
|
||||||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/tidevice_entry.py" />
|
|
||||||
<option name="PARAMETERS" value="" />
|
|
||||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
|
||||||
<option name="EMULATE_TERMINAL" value="false" />
|
|
||||||
<option name="MODULE_MODE" value="false" />
|
|
||||||
<option name="REDIRECT_INPUT" value="false" />
|
|
||||||
<option name="INPUT_FILE" value="" />
|
|
||||||
<method v="2" />
|
|
||||||
</configuration>
|
|
||||||
<recent_temporary>
|
|
||||||
<list>
|
|
||||||
<item itemvalue="Python.tidevice_entry" />
|
|
||||||
</list>
|
|
||||||
</recent_temporary>
|
|
||||||
</component>
|
</component>
|
||||||
<component name="SharedIndexes">
|
<component name="SharedIndexes">
|
||||||
<attachedChunks>
|
<attachedChunks>
|
||||||
@@ -181,7 +159,9 @@
|
|||||||
<workItem from="1756979981948" duration="4536000" />
|
<workItem from="1756979981948" duration="4536000" />
|
||||||
<workItem from="1757053266703" duration="9092000" />
|
<workItem from="1757053266703" duration="9092000" />
|
||||||
<workItem from="1757308358620" duration="654000" />
|
<workItem from="1757308358620" duration="654000" />
|
||||||
<workItem from="1757309200278" duration="986000" />
|
<workItem from="1757309200278" duration="8241000" />
|
||||||
|
<workItem from="1757317510820" duration="50000" />
|
||||||
|
<workItem from="1757317658542" duration="8554000" />
|
||||||
</task>
|
</task>
|
||||||
<task id="LOCAL-00001" summary="ai 开始测试">
|
<task id="LOCAL-00001" summary="ai 开始测试">
|
||||||
<option name="closed" value="true" />
|
<option name="closed" value="true" />
|
||||||
@@ -218,7 +198,7 @@
|
|||||||
</component>
|
</component>
|
||||||
<component name="com.intellij.coverage.CoverageDataManagerImpl">
|
<component name="com.intellij.coverage.CoverageDataManagerImpl">
|
||||||
<SUITE FILE_PATH="coverage/iOSAI$123__1_.coverage" NAME="123 (1) 覆盖结果" MODIFIED="1756897091135" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
|
<SUITE FILE_PATH="coverage/iOSAI$123__1_.coverage" NAME="123 (1) 覆盖结果" MODIFIED="1756897091135" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
|
||||||
<SUITE FILE_PATH="coverage/iOSAI$Main.coverage" NAME="Main Coverage Results" MODIFIED="1757309807138" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="" />
|
<SUITE FILE_PATH="coverage/iOSAI$Main.coverage" NAME="Main Coverage Results" MODIFIED="1757329579933" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="" />
|
||||||
<SUITE FILE_PATH="coverage/iOSAI$mac_wda_agent.coverage" NAME="mac_wda_agent Coverage Results" MODIFIED="1756473148639" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/script" />
|
<SUITE FILE_PATH="coverage/iOSAI$mac_wda_agent.coverage" NAME="mac_wda_agent Coverage Results" MODIFIED="1756473148639" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/script" />
|
||||||
<SUITE FILE_PATH="coverage/iOSAI$tidevice_entry.coverage" NAME="tidevice_entry Coverage Results" MODIFIED="1756886706033" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
|
<SUITE FILE_PATH="coverage/iOSAI$tidevice_entry.coverage" NAME="tidevice_entry Coverage Results" MODIFIED="1756886706033" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
|
||||||
<SUITE FILE_PATH="coverage/iOSAI$ScriptManager.coverage" NAME="ScriptManager 覆盖结果" MODIFIED="1756896057801" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/script" />
|
<SUITE FILE_PATH="coverage/iOSAI$ScriptManager.coverage" NAME="ScriptManager 覆盖结果" MODIFIED="1756896057801" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="false" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/script" />
|
||||||
|
|||||||
@@ -11,12 +11,11 @@ anchorList: list[AnchorModel] = []
|
|||||||
# 线程锁
|
# 线程锁
|
||||||
anchorListLock = threading.Lock()
|
anchorListLock = threading.Lock()
|
||||||
# 打招呼数据
|
# 打招呼数据
|
||||||
prologueList = []
|
prologueList: list[str] = []
|
||||||
# 评论列表
|
# 评论列表
|
||||||
commentsList = []
|
commentsList = []
|
||||||
# 存储主播名和session_id的字典
|
# 存储主播名和session_id的字典
|
||||||
anchorWithSession = {}
|
anchorWithSession = {}
|
||||||
|
|
||||||
# 前端传递的token
|
# 前端传递的token
|
||||||
token = ''
|
token = ''
|
||||||
# 前端传递的
|
# 前端传递的
|
||||||
@@ -30,10 +29,14 @@ def removeModelFromAnchorList(model: AnchorModel):
|
|||||||
with anchorListLock:
|
with anchorListLock:
|
||||||
anchorList.remove(model)
|
anchorList.remove(model)
|
||||||
|
|
||||||
|
|
||||||
# 添加数据
|
# 添加数据
|
||||||
def addModelToAnchorList(models: list[Dict[str, Any]]):
|
def addModelToAnchorList(models: list[Dict[str, Any]]):
|
||||||
with anchorListLock:
|
with anchorListLock:
|
||||||
for dic in models:
|
for dic in models:
|
||||||
obj = AnchorModel.dictToModel(dic)
|
obj = AnchorModel.dictToModel(dic)
|
||||||
anchorList.append(obj)
|
anchorList.append(obj)
|
||||||
|
|
||||||
|
# 添加打招呼语
|
||||||
|
def addDataToPrologue(data: list[str]):
|
||||||
|
|
||||||
|
prologueList = data
|
||||||
@@ -1,9 +1,7 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
import os
|
import os
|
||||||
import signal
|
import signal
|
||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import json
|
|
||||||
import wda
|
import wda
|
||||||
import threading
|
import threading
|
||||||
import subprocess
|
import subprocess
|
||||||
@@ -30,7 +28,6 @@ class Deviceinfo(object):
|
|||||||
self._lock = threading.Lock()
|
self._lock = threading.Lock()
|
||||||
self._pending_udids = set()
|
self._pending_udids = set()
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.iproxy_path = self._iproxy_path()
|
self.iproxy_path = self._iproxy_path()
|
||||||
self.iproxy_dir = self.iproxy_path.parent
|
self.iproxy_dir = self.iproxy_path.parent
|
||||||
@@ -96,7 +93,6 @@ class Deviceinfo(object):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
now_udids = {d.udid for d in lists if d.conn_type == ConnectionType.USB}
|
now_udids = {d.udid for d in lists if d.conn_type == ConnectionType.USB}
|
||||||
|
|
||||||
# 1. 处理“已插入但未信任”的设备,一旦信任就补连接
|
# 1. 处理“已插入但未信任”的设备,一旦信任就补连接
|
||||||
for udid in list(self._pending_udids):
|
for udid in list(self._pending_udids):
|
||||||
if udid not in now_udids:
|
if udid not in now_udids:
|
||||||
@@ -281,7 +277,6 @@ class Deviceinfo(object):
|
|||||||
if not self._spawn_iproxy:
|
if not self._spawn_iproxy:
|
||||||
LogManager.error("iproxy 启动器未就绪,无法建立端口映射(初始化时未找到 iproxy)。", udid)
|
LogManager.error("iproxy 启动器未就绪,无法建立端口映射(初始化时未找到 iproxy)。", udid)
|
||||||
return None
|
return None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
p = self._spawn_iproxy(udid, self.screenProxy, 9100)
|
p = self._spawn_iproxy(udid, self.screenProxy, 9100)
|
||||||
LogManager.info(f"启动 iproxy 成功,本地 {self.screenProxy} -> 设备 9100", udid)
|
LogManager.info(f"启动 iproxy 成功,本地 {self.screenProxy} -> 设备 9100", udid)
|
||||||
|
|||||||
@@ -16,15 +16,17 @@ from Entity.ResultData import ResultData
|
|||||||
from Utils.ControlUtils import ControlUtils
|
from Utils.ControlUtils import ControlUtils
|
||||||
from Utils.ThreadManager import ThreadManager
|
from Utils.ThreadManager import ThreadManager
|
||||||
from script.ScriptManager import ScriptManager
|
from script.ScriptManager import ScriptManager
|
||||||
from Entity.Variables import anchorList, addModelToAnchorList, prologueList, removeModelFromAnchorList
|
from Entity.Variables import anchorList, prologueList, addModelToAnchorList, removeModelFromAnchorList
|
||||||
import Entity.Variables as ev
|
import Entity.Variables as ev
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
CORS(app)
|
CORS(app)
|
||||||
|
app.config['JSON_AS_ASCII'] = False # Flask jsonify 不转义中文/emoji
|
||||||
|
app.config['JSONIFY_MIMETYPE'] = "application/json; charset=utf-8"
|
||||||
|
|
||||||
listData = []
|
listData = []
|
||||||
dataQueue = Queue()
|
dataQueue = Queue()
|
||||||
|
|
||||||
|
|
||||||
def start_socket_listener():
|
def start_socket_listener():
|
||||||
port = int(os.getenv('FLASK_COMM_PORT', 0))
|
port = int(os.getenv('FLASK_COMM_PORT', 0))
|
||||||
LogManager.info(f"Received port from environment: {port}")
|
LogManager.info(f"Received port from environment: {port}")
|
||||||
@@ -230,43 +232,40 @@ def stopScript():
|
|||||||
code, msg = ThreadManager.stop(udid)
|
code, msg = ThreadManager.stop(udid)
|
||||||
return ResultData(code=code, data="", msg=msg).toJson()
|
return ResultData(code=code, data="", msg=msg).toJson()
|
||||||
|
|
||||||
|
# 关注打招呼
|
||||||
# 传递主播数据(关注主播打招呼)
|
|
||||||
@app.route('/passAnchorData', methods=['POST'])
|
@app.route('/passAnchorData', methods=['POST'])
|
||||||
def passAnchorData():
|
def passAnchorData():
|
||||||
data: Dict[str, Any] = request.get_json()
|
try:
|
||||||
# 设备列表
|
data: Dict[str, Any] = request.get_json()
|
||||||
|
# 设备列表
|
||||||
|
idList = data.get("deviceList", [])
|
||||||
|
# 主播列表
|
||||||
|
acList = data.get("anchorList", [])
|
||||||
|
# 是否需要回复
|
||||||
|
needReply = data.get("needReply", True)
|
||||||
|
# 获取打招呼数据
|
||||||
|
ev.prologueList = data.get("prologueList", [])
|
||||||
|
|
||||||
print("接收的数据", data)
|
# 添加主播数据
|
||||||
|
addModelToAnchorList(acList)
|
||||||
idList = data.get("deviceList", [])
|
# 启动线程,执行脚本
|
||||||
# 主播列表
|
for udid in idList:
|
||||||
acList = data.get("anchorList", [])
|
manager = ScriptManager()
|
||||||
# 是否需要回复
|
event = threading.Event()
|
||||||
needReply = data.get("needReply", True)
|
# 启动脚本
|
||||||
|
thread = threading.Thread(target=manager.safe_greetNewFollowers, args=(udid, needReply, event))
|
||||||
# 获取打招呼数据
|
thread.start()
|
||||||
ev.prologueList = data.get("prologueList", [])
|
# 添加到线程管理
|
||||||
|
ThreadManager.add(udid, thread, event)
|
||||||
|
return ResultData(data="").toJson()
|
||||||
# 添加主播数据
|
except Exception as e:
|
||||||
addModelToAnchorList(acList)
|
LogManager.error(e)
|
||||||
# 启动线程,执行脚本
|
|
||||||
for udid in idList:
|
|
||||||
manager = ScriptManager()
|
|
||||||
event = threading.Event()
|
|
||||||
# 启动脚本
|
|
||||||
thread = threading.Thread(target=manager.safe_greetNewFollowers, args=(udid, needReply, event))
|
|
||||||
thread.start()
|
|
||||||
# 添加到线程管理
|
|
||||||
ThreadManager.add(udid, thread, event)
|
|
||||||
return ResultData(data="").toJson()
|
|
||||||
|
|
||||||
# 获取私信数据
|
# 获取私信数据
|
||||||
@app.route("/getPrologueList", methods=['GET'])
|
@app.route("/getPrologueList", methods=['GET'])
|
||||||
def getPrologueList():
|
def getPrologueList():
|
||||||
print(ev.prologueList)
|
import Entity.Variables as Variables
|
||||||
return ResultData(data=ev.prologueList).toJson()
|
return ResultData(data=Variables.prologueList).toJson()
|
||||||
|
|
||||||
# 添加临时数据
|
# 添加临时数据
|
||||||
@app.route("/addTempAnchorData", methods=['POST'])
|
@app.route("/addTempAnchorData", methods=['POST'])
|
||||||
|
|||||||
Reference in New Issue
Block a user