BLOG [Python] - всякие безделушки :)

Сообщения
366
Реакции
46
Помог
6 раз(а)
Denzer, Сделал как вы сказали
command = 'cd /home/servers/3454/ && screen -S 3454 ./start.sh' # Путь к файлу start.sh + старт
и всё заработало! Спасибо вам!
 
Последнее редактирование:
Сообщения
271
Реакции
348
Помог
15 раз(а)
DEVV, и по коду, я бы изменил сам класс управления сервером. Что-то такое
Python:
from dataclasses import dataclass
from typing import Optional


@dataclass
class Server:
    ip: str
    port: int
    max_players: int
    start_map: str
    exec_cfg: Optional[str]
    sys_ticrate: int


@dataclass(frozen=True)
class ServerControl:
    server: Server

    def start(self) -> None:
        pass

    def stop(self) -> None:
        pass

server_control = ServerControl(
    server=Server(
        ip="127.0.0.1",
        port=27015,
        max_players=32,
        start_map="de_dust2",
        exec_cfg="server.cfg",
        sys_ticrate=1000
    )
)

server_control.start()
server_control.stop()
 
Сообщения
366
Реакции
46
Помог
6 раз(а)
Denzer, спасибо за наводки, сделаю как у вас
 
Последнее редактирование:
Сообщения
366
Реакции
46
Помог
6 раз(а)
Denzer А можно еще вопрос? Я изначально хотел сделать так:
Подключить бота через FTP и там запустить уже hlds_run. Но насколько я понял через такой протокол нельзя команды выполнять (я заюзал fptlib). Хотелось бы узнать, нет ли никаких вариантов сделать это?
 
Сообщения
271
Реакции
348
Помог
15 раз(а)
DEVV, не понял конкретно про что вы. Чтобы запустить вашего бота, вам в любом случае нужен будет терминал, т.е. ssh.
 
Сообщения
366
Реакции
46
Помог
6 раз(а)
Denzer,
Я поставил на свою тачку (убунту 18.04) сервис vsftpd, настроил его и создал FTP-аккаунт с рабочем каталогом. Через FileZilla подключился - всё ок. И теперь что я изначально хотел сделать:
Сейчас у бота логика такая же, типа он переходит в директорию сервера, и там выполняет команду запуска, я хотел сделать так, что бот пусть подключится к тому FTP-аккаунту с помощью библиотеки ftplib (бот подключился) на питоне, ведь там есть hlds_run и просто запустит его... Но потом я кое-где читал что FTP протокол не позволит выполнять команды типа (hlds_run -game...). Вот и хотел у вас спросить можно ли всё таки запустить тот файл таким образом (бот подключился к фтп и запустил hlds_run в скрине)
 
Последнее редактирование:
Сообщения
271
Реакции
348
Помог
15 раз(а)
DEVV, вряд ли и вообще очень странное решение
 
  • Нравится
Реакции: DEVV
Сообщения
133
Реакции
154
DEVV, ты не сможешь сделать это через FTP, хоть тресни, этот протокол для таких задач не предназначен. Если у тебя бот находится на той же машине, где сервер, то ты можешь воспользоваться модулем subprocess и вызвать hlds_run (почитать можно тут, например, https://janakiev.com/blog/python-shell-commands/ или тут https://pythonworld.ru/moduli/modul-subprocess.html) . Если он находится на другой машине, то что приходит на ум, так это поднять небольшой сервачок на Python на машине с твоей сборкой и сделать роутинг, при запросе на который у тебя бы вызывалась команда на запуск сервера.

Пример сервера, который ты мог бы использовать. Набросал за 10 минут

Код:
'''

HLDS Starter Server

Developed by Glaster (aka IslingitonG)
Version: 1.4


'''

import os
import uvicorn
import subprocess
import psutil
from fastapi import FastAPI, Request, HTTPException, BackgroundTasks

app = FastAPI()


PORT = 1337 # можешь заменить на свой
SERVER_DIR = "E:\SERVERS\SERVERS\GameServers\Half-Life\INDEV\Batman vs Ironman\\" # Путь до директории с твоим сервером
SECRET_KEY = "YAY"
SERVER_EXECURE_QUERY = "hlds.exe --game valve --map crossfire" # Команда на запуск


def is_hlds_running():
    """Checks if the HLDS process has been already started"""
    process_list = []
    for process in psutil.process_iter(['name']):
        if 'hlds' in process.info["name"]:
            return True
    return False


def start_server():
    """Executes command to run the server"""
    process = subprocess.Popen(SERVER_EXECURE_QUERY, shell=True)


@app.post("/start_server")
async def run_server(info: Request, background_tasks: BackgroundTasks):
    """Provides routing for start/restart server"""
    req_info = await info.json()
    if req_info["key"] == SECRET_KEY:
        if is_hlds_running():
            return {"status": 500, "description": "HLDS is already running!"}
        os.chdir(SERVER_DIR)
        background_tasks.add_task(start_server)
        return {"status": 200, "description": "The server has been succesfully started!"}
    raise HTTPException(status_code=401, detail="Access denied!")


def main():
    uvicorn.run(f"{os.path.basename(__file__)[:-3]}:app", log_level="info", port=PORT)


if __name__ == '__main__':
    main()

Шлёшь POST запрос на роутинг ТВОЙ_IP:PORT/start_server с JSON с таким телом

Код:
{
   "key": "Твой секретный ключ"
}

И всё, товя сборка запущена.

А, ну и зависимости установить не забудь:

Код:
pip install fastapi
pip install uvicorn
pip install psutil
 

Вложения

Сообщения
366
Реакции
46
Помог
6 раз(а)
Denzer, вот и это хотел узнать, спасибо)

Islingiton_G, у меня и бот и сервер на одной машине, всё работает. Спасибо большое тебе! Код забрал на будущее
 
Сообщения
1
Реакции
0
Сделал возможность через бота управлять ходьбой , прыжок , сесть, крутиться left right, вперед назал влево вправо, ( но не все сразу нажимать нельзя )
Полностью управление amxmodmenu ( или других команд )
При этом не нажимая клавиши, всё через бота)
DEVV, Включение/выключение добавил.
Так же все логи которых пишутся в console сервера пишутся в лайве в бота ( можно фулл инфу сервера так и Играков отдельно )
 
Сообщения
366
Реакции
46
Помог
6 раз(а)
Сделал возможность через бота управлять ходьбой , прыжок , сесть, крутиться left right, вперед назал влево вправо, ( но не все сразу нажимать нельзя )
Полностью управление amxmodmenu ( или других команд )
При этом не нажимая клавиши, всё через бота)
DEVV, Включение/выключение добавил.
Так же все логи которых пишутся в console сервера пишутся в лайве в бота ( можно фулл инфу сервера так и Играков отдельно )
Что?
 
Сообщения
313
Реакции
21
Помог
7 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
xtample, интересно, поделишься творением?)
DEVV, Не, ну а чо? Прикольно ж хаха... Если попросить GPT то думаю отпишет)
 
Сообщения
366
Реакции
46
Помог
6 раз(а)
Всем привет.
На днях я решил написать телеграм бота для поиска песен на платформе vk.com, по их названию или автору.
Примерный бот @vkmusic_bot. Так вот, я столкнулся с одной проблемой, а именно - ВК давно запретил разработчикам доступ к своему API и от туда скачать музыки через бота не получится. По этому, нужна альтернатива. Либо другая площадка либо другая библиотека (для Python). Но, дело в том, что мне нужно найти неофициальные альтернативы.
Кто-то может знает подобные сервисы с открытом API?
Бот вроде как работает как надо
 

Вложения

Сообщения
458
Реакции
263
Помог
9 раз(а)
DEVV, поспрашивай у ребят с беседы VkNet в телеге, может подскажут что по апихе
 
Сообщения
366
Реакции
46
Помог
6 раз(а)
ufame, там питонистов не оказалось)) но вроде подсказали как быть
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу