Browse Source

вынес исключение за пределы

добавил проверок
теперь можно банить
huy
gsd 2 years ago
parent
commit
1bd0606ca2
  1. 15
      admin_ext/ban.py
  2. 18
      bot.py
  3. 17
      exceptions.py
  4. 43
      player.py

15
admin_ext/ban.py

@ -0,0 +1,15 @@
import discord
class Extension:
def __init__(self, core):
@core.tree.command(name = "ban", description = "Забанить игрока на серверах")
@discord.app_commands.describe(profile=core.ANY_INPUT, reason="причина", minutes="время бана | 0 - навсегда")
async def ban_player(
interaction: discord.Interaction,
profile: str,
reason: str,
minutes: int = 0
):
steam64 = await core.GetSteam64OfDiscord(interaction.user)
player = await core.GetPlayer(profile, steam64, False)
return await interaction.response.send_message(f'{await player.ban(reason, minutes)}', ephemeral=False)

18
bot.py

@ -7,14 +7,9 @@ from datetime import datetime
from discord.ext import tasks
from player import *
import traceback
from exceptions import *
#Скрыть сообщение если надо ephemeral=True
class NeedDiscordAuthOfSteam(Exception):
pass
class DiscordClient(discord.Client):
ANY_INPUT = "ссылка на стим | имя игрока | стимид"
discord2steam_cache = {}
@ -62,7 +57,16 @@ class DiscordClient(discord.Client):
@self.tree.error
async def on_app_command_error(interaction, error):
if isinstance(error.original, CannotCastToSteamID):
return await interaction.response.send_message(f'Не возможно найти такой профиль, попробуй написать иные данные!', ephemeral=True)
return await interaction.response.send_message("Не возможно найти такой профиль, попробуй написать иные данные!", ephemeral=True)
elif isinstance(error.original, LowPermition):
#Добавить проверку на модератора или в бекенде добавить другой код ответа
return await interaction.response.send_message("Это не для тебя и не для таких как ты сделано...\n", ephemeral=True)
elif isinstance(error.original, NotFoundPlayerOnServer):
return await interaction.response.send_message("Игрок не найден на серверах", ephemeral=True)
elif isinstance(error.original, UnknownBackendResponse):
return await interaction.response.send_message("Ошибка на стороне сервера в исполнении говнокода, стоит подождать или позвать помощь", ephemeral=False)
elif isinstance(error.original, discord.errors.NotFound):
return await interaction.response.send_message("Слишком долгий ответ со стороны сервера, причины:\n1) Возможно бекенд сдох\n2)Cлишком долгий незапланированный ответ с сервера\n3)Стоит позвать помощь", ephemeral=True)
traceback.print_exc()
async def GetSteam64OfDiscord(self, user, no_cache = False):

17
exceptions.py

@ -0,0 +1,17 @@
class CannotCastToSteamID(Exception):
pass
class NotLoadProfile(Exception):
pass
class NeedDiscordAuthOfSteam(Exception):
pass
class LowPermition(Exception):
pass
class NotFoundPlayerOnServer(Exception):
pass
class UnknownBackendResponse(Exception):
pass

43
player.py

@ -2,12 +2,7 @@ from email import message
import aiohttp, os
from datetime import datetime
from discord import Embed
class CannotCastToSteamID(Exception):
pass
class NotLoadProfile(Exception):
pass
from exceptions import *
class Player:
original_request = ""
@ -27,7 +22,11 @@ class Player:
self.steamid = await self.GetSteamIDOfProfile(self.original_request)
async def LoadProfile(self):
self.current = await self.GetProfile(self.steamid.get("steam64"))
self.current = await self.GetProfile(self.steam64)
@property
def steam64(self):
return self.steamid.get('steam64', 0)
@property
def embed(self) -> Embed:
@ -160,15 +159,15 @@ class Player:
async with aiohttp.ClientSession(cookies={
"secretkey":os.getenv("BACKEND_SECRETKEY"),
"steam64": self.requester_steam64}) as session:
async with session.post(f"{os.getenv('BACKEND_URL')}/api/admin/kick?steam64={self.steamid.get('steam64')}", ssl=False) as response:
async with session.post(f"{os.getenv('BACKEND_URL')}/api/admin/kick?steam64={self.steam64}", ssl=False) as response:
result = await response.text()
if response.status == 200:
return "Кикнут с серверов"
if response.status == 404:
return "Игрок не найден на серверах"
raise NotFoundPlayerOnServer
if response.status == 403:
return "Это не для тебя и не для таких как ты сделано..."
return "помогите я обосрался"
raise LowPermition
raise UnknownBackendResponse
async def rcon(self, command, args):
if not self.current:
@ -184,8 +183,20 @@ class Player:
async with session.post(f"{os.getenv('BACKEND_URL')}/api/admin/rcon?srv={server}&command={final_command}", ssl=False) as response:
return await response.text()
else:
return "Игрок не играет на серверах"
raise NotFoundPlayerOnServer
async def ban(self, reason, minutes):
async with aiohttp.ClientSession(cookies={
"secretkey":os.getenv("BACKEND_SECRETKEY"),
"steam64": self.requester_steam64}) as session:
async with session.post(f"{os.getenv('BACKEND_URL')}/api/admin/ban?steam64={self.steam64}&ban_reason={reason}&ban_length={minutes}", ssl=False) as response:
if response.status == 200:
return "Игрок забанен или уже был в бане"
if response.status == 404:
raise NotFoundPlayerOnServer
if response.status == 403:
raise LowPermition
raise UnknownBackendResponse
###############
#user command
@ -194,12 +205,14 @@ class Player:
async with aiohttp.ClientSession(cookies={
"secretkey":os.getenv("BACKEND_SECRETKEY"),
"steam64": self.requester_steam64}) as session:
async with session.post(f"{os.getenv('BACKEND_URL')}/api/profile/current/report?steam64={self.steamid.get('steam64')}&text={reason}", ssl=False) as response:
async with session.post(f"{os.getenv('BACKEND_URL')}/api/profile/current/report?steam64={self.steam64}&text={reason}", ssl=False) as response:
result = int(await response.text())
if result == 0:
return "Игрок с таким именем не играет на серверах в данный момент"
return "Игрок с таким именем не играет на серверах в данный момент..."
elif result < 0:
return f"Падажди, следующий репорт можно отправить только после: {-1 * result} секунд"
else:
return f"Падажди, следующий репорт можно отправить только после: {utime2human(result)}"
return f"Репорт отправлен!"
def workshopmap2bsp(map_name):

Loading…
Cancel
Save