TotalFreedomBot/functions.py

126 lines
3.0 KiB
Python

import itertools
import json
import os
import requests
from discord.ext import commands
class EmbedEntry:
def __init__(self, name, value, playercount=None):
self.name = name
self.value = value
if playercount:
self.playercount = playercount
def format_list_entry(embed, l, name):
l_names = [f'{l[i]}' for i in range(len(l))]
l_names = [name.replace('_', '\_') for name in l_names]
em = EmbedEntry(
name=name,
value=", ".join(l_names),
playercount=len(l)
)
return em
def get_prefix(client, message):
prefix = os.getenv('prefix')
prefixes = map(''.join, itertools.product(*((letter.upper(), letter.lower()) for letter in prefix)))
return commands.when_mentioned_or(*prefixes)(client, message)
def did_mention_other_user(users, author):
for user in users:
if user is not author:
return True
return False
def removed_user_mentions(old, new):
users = []
for user in old:
if user not in new:
users.append(user)
return users
def removed_role_mentions(old, new):
roles = []
for role in old:
if role not in new:
roles.append(role)
return roles
def get_avatar(user, animate=True):
if user.avatar_url:
avatar = str(user.avatar_url).replace(".webp", ".png")
else:
avatar = str(user.default_avatar_url)
if not animate:
avatar = avatar.replace(".gif", ".png")
return avatar
def read_json(file_name):
with open(f'{file_name}.json', 'r') as file:
data = json.load(file)
return data
def write_json(file_name, data):
with open(f'{file_name}.json', 'w') as file:
json.dump(data, file, indent=4)
return data
def config_entry(entry):
return read_json('config')[entry]
def hit_endpoint(command, server=1, timeout=10):
config_file = read_json('config')
if server == 1:
ip = config_file['SERVER_IP']
pw = config_file['ENDPOINTS_PW']
else:
ip = config_file['SERVER_IP_2']
pw = config_file['ENDPOINTS_PW_2']
port = config_file['ENDPOINTS_PORT']
url = f"http://{ip}:{port}?password={pw}&command={command}"
payload = {}
headers = {}
try:
response = json.loads(requests.request(
"GET", url, headers=headers, data=payload, timeout=timeout).text)
except Exception as e:
raise Exception(f'Error while hitting endpoint: {e}')
return response['response']
def get_server_status(server=1):
config_file = read_json('config')
if server == 1:
ip = config_file['SERVER_IP']
else:
ip = config_file['SERVER_IP_2']
port = config_file['PLAYERLIST_PORT']
try:
requests.get(f"http://{ip}:{port}/list?json=true", timeout=5).json()
except:
return False
else:
return True
def get_visible_player_count(list_json):
total = 0
for x in list_json:
if isinstance(list_json[x], list):
total += len(list_json[x])
return total