From ee02452dd5a61b0487706782020f9647ae202238 Mon Sep 17 00:00:00 2001 From: Dustin Pianalto Date: Tue, 18 Aug 2020 00:02:28 -0800 Subject: [PATCH] Added broadcast endpoint --- geeksbot_web/rcon/api_urls.py | 3 ++- geeksbot_web/rcon/views.py | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/geeksbot_web/rcon/api_urls.py b/geeksbot_web/rcon/api_urls.py index 04c6160..e8dd337 100644 --- a/geeksbot_web/rcon/api_urls.py +++ b/geeksbot_web/rcon/api_urls.py @@ -1,6 +1,6 @@ from django.urls import path -from .views import RCONServersAPI, RCONServerDetailAPI, ListPlayers, WhitelistAPI +from .views import RCONServersAPI, RCONServerDetailAPI, ListPlayers, WhitelistAPI, BroadcastAPI app_name = "rcon_api" urlpatterns = [ @@ -8,4 +8,5 @@ urlpatterns = [ path("//", view=RCONServerDetailAPI.as_view(), name="server_detail"), path("//listplayers/", view=ListPlayers.as_view(), name='listplayers'), path("//whitelist/", view=WhitelistAPI.as_view(), name='whitelist'), + path("//broadcast/", view=BroadcastAPI.as_view(), name='broadcast'), ] diff --git a/geeksbot_web/rcon/views.py b/geeksbot_web/rcon/views.py index 084bed5..37cbf3d 100644 --- a/geeksbot_web/rcon/views.py +++ b/geeksbot_web/rcon/views.py @@ -96,3 +96,24 @@ class WhitelistAPI(APIView): status=status.HTTP_408_REQUEST_TIMEOUT) resp = ark.whitelist(user.steam_id) return create_rcon_response(resp, status=status.HTTP_200_OK) + + +class BroadcastAPI(APIView): + permission_classes = [IsAuthenticated] + + def post(self, request, guild_id, name, format=None): + message = request.data.get('message') + if not message: + return create_error_response('A message is required', + status=status.HTTP_400_BAD_REQUEST) + server: RconServer = RconServer.get_server(guild_id, name) + if not server: + return create_error_response('RCON Server Does Not Exist', + status=status.HTTP_404_NOT_FOUND) + ark = arcon.ARKServer(host=server.ip, port=server.port, password=server.password) + connected = ark.connect() + if not connected == 1: + return create_error_response('Connection Failure', + status=status.HTTP_408_REQUEST_TIMEOUT) + resp = ark.broadcast(message) + return create_rcon_response(resp, status=status.HTTP_200_OK)