Browse Source

ws setup

master
gsd 1 year ago
parent
commit
253fb2c9fa
  1. 3
      .gitignore
  2. 2
      Dockerfile
  3. 15
      bot.py
  4. 2
      git_build/Dockerfile
  5. 51
      ws.py

3
.gitignore

@ -1 +1,2 @@
.env
.env
__pycache__

2
Dockerfile

@ -1,5 +1,5 @@
FROM python:3.10
RUN python -m pip install git+https://github.com/Rapptz/discord.py aiohttp
RUN python -m pip install git+https://github.com/Rapptz/discord.py aiohttp websocket-client
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY ./ ./

15
bot.py

@ -12,6 +12,7 @@ import traceback
from exceptions import *
import asyncio, sys, argparse
from aiohttp.client_exceptions import ClientConnectionError
import ws
#Скрыть сообщение если надо ephemeral=True
class DiscordClient(commands.Bot):
@ -102,6 +103,7 @@ class DiscordClient(commands.Bot):
elif isinstance(error.original, NotFoundPlayerOnServer):
return await interaction.followup.send("Игрок не найден на серверах", ephemeral=True)
elif isinstance(error.original, UnknownBackendResponse):
traceback.print_exc()
return await interaction.followup.send("Ошибка на стороне сервера в исполнении говнокода, стоит подождать или позвать помощь", ephemeral=False)
elif isinstance(error.original, discord.errors.NotFound):
return await interaction.followup.send("Слишком долгий ответ со стороны сервера, причины:\n1) Возможно бекенд сдох\n2)Cлишком долгий незапланированный ответ с сервера\n3)Стоит позвать помощь", ephemeral=True)
@ -190,7 +192,12 @@ if __name__ == "__main__":
DiscordClient("","")
sys.exit(0)
DiscordClient(
os.getenv("BACKEND_URL"),
os.getenv("BACKEND_SECRETKEY")
).run(os.getenv("DISCORD_TOKEN"))
def run():
DiscordClient(
os.getenv("BACKEND_URL"),
os.getenv("BACKEND_SECRETKEY")
).run(os.getenv("DISCORD_TOKEN"))
ws.SERVICE_NAME = "discord_bot"
ws.START_AFTER_CONNECT = run
wsc = ws.WS(os.getenv("BACKEND_URL"), os.getenv("BACKEND_SECRETKEY"))

2
git_build/Dockerfile

@ -1,5 +1,5 @@
FROM python:3.10
RUN python -m pip install git+https://github.com/Rapptz/discord.py aiohttp
RUN python -m pip install git+https://github.com/Rapptz/discord.py aiohttp websocket-client
WORKDIR /app
ENV TZ=Europe/Moscow

51
ws.py

@ -0,0 +1,51 @@
import websocket, sys
from threading import Thread
from json import dumps
from time import sleep
START_AFTER_CONNECT = None
SERVICE_NAME = None
def create_pulser(ws: websocket.WebSocketApp):
def run(ws):
while 1:
ws.send_text(dumps({"name":SERVICE_NAME}))
sleep(15)
thread = Thread(target=run, args=[ws], daemon=True)
thread.start()
def start():
print("substart")
class WS:
ws: websocket.WebSocketApp
def __init__(self, backend, auth):
if (START_AFTER_CONNECT is None or SERVICE_NAME is None):
print("Setup START_AFTER_CONNECT and SERVICE_NAME")
sys.exit(1)
else:
print(f"Run after setup {SERVICE_NAME}: {START_AFTER_CONNECT}")
self.ws = websocket.WebSocketApp(backend, cookie="secretkey="+auth, on_close=self.on_close, on_open=self.on_open)
@staticmethod
def on_close(ws_self, status_code, msg):
print(f"WS Close, code:{status_code}, msg: {msg}")
sys.exit(0)
@staticmethod
def on_open(ws_self):
print("Connected")
create_pulser(ws_self)
if START_AFTER_CONNECT:
START_AFTER_CONNECT()
def run(self):
if self.ws.run_forever():
print("fuck")
if __name__ == "__main__":
START_AFTER_CONNECT = start
SERVICE_NAME = "test"
wsc = WS("wss://tf2.pblr-nyk.pro/ws/services", "")
wsc.run()
Loading…
Cancel
Save