#
# @@@@@@ @@@@@@ @@@@@@@ @@@@@@@ @@@@@@ @@@@@@@@@@ @@@@@@ @@@@@@@ @@@ @@@ @@@ @@@@@@@@ @@@@@@
# @@@@@@@@ @@@@@@@ @@@@@@@ @@@@@@@@ @@@@@@@@ @@@@@@@@@@@ @@@@@@@@ @@@@@@@@ @@@ @@@ @@@ @@@@@@@@ @@@@@@@
# @@! @@@ !@@ @@! @@! @@@ @@! @@@ @@! @@! @@! @@! @@@ @@! @@@ @@! @@@ @@! @@! !@@
# !@! @!@ !@! !@! !@! @!@ !@! @!@ !@! !@! !@! !@! @!@ !@! @!@ !@! @!@ !@! !@! !@!
# @!@!@!@! !!@@!! @!! @!@!!@! @!@ !@! @!! !!@ @!@ @!@ !@! @!@ !@! @!@ !@! @!! @!!!:! !!@@!!
# !!!@!!!! !!@!!! !!! !!@!@! !@! !!! !@! ! !@! !@! !!! !@! !!! !@! !!! !!! !!!!!: !!@!!!
# !!: !!! !:! !!: !!: :!! !!: !!! !!: !!: !!: !!! !!: !!! !!: !!! !!: !!: !:!
# :!: !:! !:! :!: :!: !:! :!: !:! :!: :!: :!: !:! :!: !:! :!: !:! :!: :!: !:!
# :: ::: :::: :: :: :: ::: ::::: :: ::: :: ::::: :: :::: :: ::::: :: :: :::: :: :::: :::: ::
# : : : :: : : : : : : : : : : : : : : :: : : : : : : :: : : : :: :: :: : :
#
# © Copyright 2024
#
# https://t.me/Den4ikSuperOstryyPer4ik
# and
# https://t.me/ToXicUse
#
# 🔒 Licensed under the GNU AGPLv3
# https://www.gnu.org/licenses/agpl-3.0.html
#
# meta developer: @AstroModules
# meta banner: https://raw.githubusercontent.com/Den4ikSuperOstryyPer4ik/Astro-modules/main/Banners/BrawlStats.jpg
# requires: brawlstats
import brawlstats as bs
import requests
from .. import loader, utils
@loader.tds
class BrawlStatsInfo(loader.Module):
'''Brawl Stars Players/Clubs information :)'''
strings = {
"name": "BrawlStatsInfo"
}
def __init__(self):
self.config = loader.ModuleConfig(
loader.ConfigValue(
"bs_api_token",
None,
doc="Сохраните здесь свой API-Токен BrawlStarsAPI",
validator=loader.validators.Hidden()
)
)
def getip(self):
ip = requests.get('https://api.myip.com/').json()["ip"]
return ip
async def client_ready(self, client, db):
await client.send_message("me", "Модуль был инициализирован.\nВаш IP-Адрес для получения API-Токена BrawlStars: {}".format(self.getip()))
try:
self.bsc = bs.Client(self.config["bs_api_token"]) if self.config["bs_api_token"] else None
except Exception:
self.bsc = None
def get_bs_client(self):
if self.bsc is None:
self.bsc = bs.Client(self.config["bs_api_token"]) if self.config["bs_api_token"] else None
return None
@loader.command()
async def get_my_ip(self, message):
"""Получить свой IP-Адрес для получения API-Токен BrawlStarsAPI"""
await utils.answer(message, "Ваш IP-Адрес для получения API-Токена BrawlStars: {}".format(self.getip()))
@loader.command()
async def set_bs_api_token(self, message):
""" - сохранить свой API-Токен в конфиге модуля."""
await self.allmodules.commands['fconfig'](
await utils.answer(message, '{}fconfig BrawlStatsInfo bs_api_token {}'.format(self.get_prefix(), utils.get_args_raw(message)))
)
self.get_bs_client()
def get_brawlers_names(self, text: str):
names = {
'SHELLY': "ШЕЛЛИ",
'COLT': "КОЛЬТ",
'BULL': "БУЛЛ",
'BROCK': 'БРОК',
'RICO': 'РИКО',
'SPIKE': 'СПАЙК',
'BARLEY': 'БАРЛИ',
'JESSIE': 'ДЖЕССИ',
'NITA': "НИТА",
'DYNAMIKE': 'ДИНАМАЙК',
'EL PRIMO': 'ЭЛЬ ПРИМО',
'MORTIS': 'МОРТИС',
'CROW': 'ВОРОН',
'POCO': 'ПОКО',
'BO': 'БО',
'PIPER': 'ПАЙПЕР',
'PAM': 'ПЭМ',
'TARA': 'ТАРА',
'DARRYL': 'ДЭРРИЛ',
'PENNY': 'ПЕННИ',
'FRANK': 'ФРЭНК',
'GENE': 'ДЖИН',
'TICK': 'ТИК',
'LEON': 'ЛЕОН',
'ROSA': 'РОЗА',
'CARL': 'КАРЛ',
'BIBI': 'БИБИ',
'8-BIT': '8-БИТ',
'SANDY': 'СЭНДИ',
'BEA': 'БЕА',
'EMZ': 'ЭМЗ',
'MR. P': 'МИСТЕР П.',
'MAX': 'МАКС',
'JACKY': 'ДЖЕКИ',
'GALE': 'ГЭЙЛ',
'NANI': 'НАНИ',
'SPROUT': 'СПРАУТ',
'SURGE': 'ВОЛЬТ',
'COLETTE': 'КОЛЕТТ',
'AMBER': 'АМБЕР',
'LOU': 'ЛУ',
'BYRON': 'БАЙРОН',
'EDGAR': 'ЭДГАР',
'RUFFS': 'ГАВС',
'STU': 'СТУ',
'BELLE': 'БЕЛЛЬ',
'SQUEAK': 'СКУИК',
'GROM': 'ГРОМ',
'BUZZ': 'БАЗЗ',
'GRIFF': 'ГРИФФ',
'ASH': 'ЭШ',
'MEG': 'МЭГ',
'LOLA': 'ЛОЛА',
'FANG': 'ФЭНГ',
'EVE': 'ЕВА',
'JANET': 'ДЖАНЕТ',
'BONNIE': 'БОННИ',
'OTIS': 'ОТИС',
'SAM': 'СЭМ',
'GUS': 'ГАС',
'BUSTER': 'БАСТЕР',
'CHESTER': 'ЧЕСТЕР',
'GRAY': 'ГРЕЙ',
'MANDY': 'МЭНДИ',
}
text_replaced = text
for i, o in names.items():
text_replaced = text_replaced.replace(i, o)
return text_replaced
def get_player_info(self, tag: str, raw: bool = False):
self.get_bs_client()
player = self.bsc.get_player(
tag if not tag.startswith("#") else tag.replace("#", "").replace(" ", "")
)
return player if raw else f"Информация об игроке:\nНикнейм: {player.name}\nТег: {player.tag}\nКол-во кубков всего: {player.trophies}\nМакс. кол-во кубков: {player.highest_trophies}\nУровень опыта: {player.exp_level}\nПобед 3x3: {player.x3vs3_victories}\nОдиночных побед: {player.solo_victories}\nПарных побед: {player.duo_victories}\nБравлеров(Бойцов): {len(player.brawlers)}\nТег клуба: {player.club.tag if player.club.tag else 'Отсутствует клуб.'}\nИмя Клуба: {player.club.name if player.club.name else 'Отсутствует клуб.'}"
def get_club_info(self, tag: str, raw: bool = False):
self.get_bs_client()
club = self.bsc.get_club(
tag if not tag.startswith("#") else tag.replace("#", "").replace(" ", "")
)
return club if raw else f"Информация о клубе:\nИмя клуба: {club.name}\nТег: {club.tag}\nКол-во кубков всего: {club.trophies}\nМин. необходимое кол-во кубков для входа: {club.required_trophies}\nОписание: {self.get_club_description(club.description)}\nТип клуба: {club.type}\nУчастники:\n{self.get_club_members_info(club)}"
def get_club_members_info(self, club, full: bool = False):
self.get_bs_client()
def get_member_role(role: str):
for i, o in {"vicePresident": "Вице-президент", "president": "Президент", "member": "Участник"}.items():
role = role.replace(i, o)
return role
return "\n————\n".join(
[
f"{i.name}—{get_member_role(i.role)} ({i.tag} | {i.trophies}) " for i in club.get_members()
] if full else [
f"{i.name}—{get_member_role(i.role)} ({i.tag})" for i in club.get_members()
]
)
def get_club_description(self, text: str):
text_replaced = text
for i in range(15):
text_replaced = text_replaced.replace(f"c{i}", "code")
return text_replaced
@loader.command()
async def bs_get_player(self, message):
"""<#player_tag> <#player_tag2> -> получить информацию об игроке/игроках(теги можно через пробел указывать)"""
msg = await utils.answer(message, "Собираю информацию, пожалуйста подождите...")
args = utils.get_args_raw(message)
info = []
self.get_bs_client()
if len(args.split(" ")) != 1:
for player_tag in args.split(" "):
info.append(self.get_player_info(player_tag))
info = "\n———————————\n".join(info)
else:
info = self.get_player_info(args)
return await utils.answer(msg, info)
@loader.command()
async def bs_get_club(self, message):
"""<#CLUB_TAG> -> получить информацию о клубе по его #ТЕГУ"""
msg = await utils.answer(message, "Собираю информацию, пожалуйста подождите...")
args = utils.get_args_raw(message)
info = []
info = self.get_club_info(args)
return await utils.answer(msg, info)
@loader.command()
async def bs_get_club_members(self, message):
"""<#CLUB_TAG> -> получить информацию об участниках клуба по его #ТЕГУ"""
msg = await utils.answer(message, "Собираю информацию, пожалуйста подождите...")
args = utils.get_args_raw(message)
info = f"Участники:\n{self.get_club_members_info(self.get_club_info(args, True), True)}"
return await utils.answer(msg, info)
@loader.command()
async def bs_get_player_brawlers(self, message):
"""<#player_tag> -> получить информацию о Бравлерах(Бойцах) игрока по его #ТЕГУ"""
msg = await utils.answer(message, "Собираю информацию, пожалуйста подождите...")
args = utils.get_args_raw(message)
player = self.get_player_info(args, True)
brawlers = []
for brawler in player.brawlers:
brawlers.append(f"Имя: {brawler.name}\nКубков на бойце: {brawler.trophies}\nМакс. кол-во кубков на бойце: {brawler.highest_trophies}\nРанг: {brawler.rank}\nСила: {brawler.power}")
info = "\n————————\n".join(brawlers)
info = self.get_brawlers_names(info)
return await utils.answer(msg, info)