AstraOS Ver. 1.6:
- DC Bots werden automatisch nach restart gestartet
This commit is contained in:
parent
49aa10cb7e
commit
f25f7cfb15
|
|
@ -127,6 +127,44 @@ except Exception as e:
|
||||||
db = None
|
db = None
|
||||||
accounts_collection = None
|
accounts_collection = None
|
||||||
logs_collection = None
|
logs_collection = None
|
||||||
|
|
||||||
|
def start_bots_on_startup():
|
||||||
|
if discord_bots_collection is None:
|
||||||
|
print("WARNUNG: Bot-Autostart übersprungen, da keine DB-Verbindung besteht.")
|
||||||
|
return
|
||||||
|
|
||||||
|
bots_to_start = list(discord_bots_collection.find({'status': 'running'}))
|
||||||
|
if not bots_to_start:
|
||||||
|
print("INFO: Keine Bots für den Autostart markiert.")
|
||||||
|
return
|
||||||
|
|
||||||
|
print(f"INFO: Starte {len(bots_to_start)} Bot(s) automatisch...")
|
||||||
|
for bot_info in bots_to_start:
|
||||||
|
bot_id = str(bot_info['_id'])
|
||||||
|
filepath = bot_info.get('filepath')
|
||||||
|
|
||||||
|
if not os.path.exists(filepath):
|
||||||
|
print(f"FEHLER: Bot-Datei für '{bot_info['name']}' nicht gefunden: {filepath}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
try:
|
||||||
|
process = subprocess.Popen(
|
||||||
|
['python', '-u', filepath],
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
stderr=subprocess.PIPE,
|
||||||
|
text=True,
|
||||||
|
encoding='utf-8',
|
||||||
|
errors='replace'
|
||||||
|
)
|
||||||
|
running_bots[bot_id] = {'process': process, 'history': []}
|
||||||
|
thread = threading.Thread(target=stream_bot_output, args=(bot_id, process))
|
||||||
|
thread.daemon = True
|
||||||
|
thread.start()
|
||||||
|
print(f"INFO: Bot '{bot_info['name']}' (PID: {process.pid}) wurde gestartet.")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"FEHLER: Bot '{bot_info['name']}' konnte nicht gestartet werden: {e}")
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
tickets_client = MongoClient(os.environ.get("MONGO_URI"))
|
tickets_client = MongoClient(os.environ.get("MONGO_URI"))
|
||||||
tickets_db = tickets_client["chainsaw_dc_data"]
|
tickets_db = tickets_client["chainsaw_dc_data"]
|
||||||
|
|
@ -722,6 +760,8 @@ def stream_bot_output(bot_id, process):
|
||||||
process.wait()
|
process.wait()
|
||||||
if bot_id in running_bots:
|
if bot_id in running_bots:
|
||||||
del running_bots[bot_id]
|
del running_bots[bot_id]
|
||||||
|
if discord_bots_collection:
|
||||||
|
discord_bots_collection.update_one({'_id': ObjectId(bot_id)}, {'$set': {'status': 'stopped'}})
|
||||||
socketio.emit('status_update', {'bot_id': bot_id, 'status': 'stopped'}, room=bot_id)
|
socketio.emit('status_update', {'bot_id': bot_id, 'status': 'stopped'}, room=bot_id)
|
||||||
socketio.emit('console_output', {'bot_id': bot_id, 'type': 'system', 'data': '--- Bot-Prozess beendet ---'}, room=bot_id)
|
socketio.emit('console_output', {'bot_id': bot_id, 'type': 'system', 'data': '--- Bot-Prozess beendet ---'}, room=bot_id)
|
||||||
@app.route('/discord_bots')
|
@app.route('/discord_bots')
|
||||||
|
|
@ -751,7 +791,8 @@ def upload_bot():
|
||||||
'name': bot_name,
|
'name': bot_name,
|
||||||
'filename': filename,
|
'filename': filename,
|
||||||
'filepath': filepath,
|
'filepath': filepath,
|
||||||
'created_at': datetime.utcnow()
|
'created_at': datetime.utcnow(),
|
||||||
|
'status': 'stopped'
|
||||||
})
|
})
|
||||||
flash(f"Bot '{bot_name}' wurde erfolgreich hochgeladen.", "success")
|
flash(f"Bot '{bot_name}' wurde erfolgreich hochgeladen.", "success")
|
||||||
return redirect(url_for('discord_bots'))
|
return redirect(url_for('discord_bots'))
|
||||||
|
|
@ -833,6 +874,7 @@ def handle_toggle_bot(data):
|
||||||
thread = threading.Thread(target=stream_bot_output, args=(bot_id, process))
|
thread = threading.Thread(target=stream_bot_output, args=(bot_id, process))
|
||||||
thread.daemon = True
|
thread.daemon = True
|
||||||
thread.start()
|
thread.start()
|
||||||
|
discord_bots_collection.update_one({'_id': ObjectId(bot_id)}, {'$set': {'status': 'running'}})
|
||||||
emit('status_update', {'bot_id': bot_id, 'status': 'running'}, room=bot_id)
|
emit('status_update', {'bot_id': bot_id, 'status': 'running'}, room=bot_id)
|
||||||
emit('console_output', {'type': 'system', 'data': f'--- Bot-Prozess gestartet (PID: {process.pid}) ---'}, room=bot_id)
|
emit('console_output', {'type': 'system', 'data': f'--- Bot-Prozess gestartet (PID: {process.pid}) ---'}, room=bot_id)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
@ -846,6 +888,7 @@ def handle_toggle_bot(data):
|
||||||
process.kill()
|
process.kill()
|
||||||
if bot_id in running_bots:
|
if bot_id in running_bots:
|
||||||
del running_bots[bot_id]
|
del running_bots[bot_id]
|
||||||
|
discord_bots_collection.update_one({'_id': ObjectId(bot_id)}, {'$set': {'status': 'stopped'}})
|
||||||
emit('status_update', {'bot_id': bot_id, 'status': 'stopped'}, room=bot_id)
|
emit('status_update', {'bot_id': bot_id, 'status': 'stopped'}, room=bot_id)
|
||||||
emit('console_output', {'type': 'system', 'data': '--- Bot-Prozess wird gestoppt... ---'}, room=bot_id)
|
emit('console_output', {'type': 'system', 'data': '--- Bot-Prozess wird gestoppt... ---'}, room=bot_id)
|
||||||
@app.route('/maintenance')
|
@app.route('/maintenance')
|
||||||
|
|
@ -926,4 +969,6 @@ def update_maintenance():
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.config['SESSION_COOKIE_SECURE'] = False
|
app.config['SESSION_COOKIE_SECURE'] = False
|
||||||
print("INFO: Starte den Server im Entwicklungsmodus ohne HTTPS.")
|
print("INFO: Starte den Server im Entwicklungsmodus ohne HTTPS.")
|
||||||
|
with app.app_context():
|
||||||
|
start_bots_on_startup()
|
||||||
socketio.run(app, host='0.0.0.0', port=5000, debug=True, allow_unsafe_werkzeug=True)
|
socketio.run(app, host='0.0.0.0', port=5000, debug=True, allow_unsafe_werkzeug=True)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue