110 lines
3.6 KiB
Python
110 lines
3.6 KiB
Python
import sys
|
|
import logging
|
|
import logging.handlers
|
|
import re
|
|
|
|
LOG_SETUP = False
|
|
|
|
# The colors class below is from:
|
|
# https://www.geeksforgeeks.org/print-colors-python-terminal
|
|
class colors:
|
|
reset = "\033[0m"
|
|
bold = "\033[01m"
|
|
disable = "\033[02m"
|
|
underline = "\033[04m"
|
|
reverse = "\033[07m"
|
|
strikethrough = "\033[09m"
|
|
invisible = "\033[08m"
|
|
|
|
class fg:
|
|
white = "\033[97m"
|
|
black = "\033[30m"
|
|
red = "\033[31m"
|
|
green = "\033[32m"
|
|
orange = "\033[33m"
|
|
blue = "\033[34m"
|
|
purple = "\033[35m"
|
|
cyan = "\033[36m"
|
|
lightgrey = "\033[37m"
|
|
darkgrey = "\033[90m"
|
|
lightred = "\033[91m"
|
|
lightgreen = "\033[92m"
|
|
yellow = "\033[93m"
|
|
lightblue = "\033[94m"
|
|
pink = "\033[95m"
|
|
lightcyan = "\033[96m"
|
|
|
|
class bg:
|
|
black = "\033[40m"
|
|
red = "\033[41m"
|
|
green = "\033[42m"
|
|
orange = "\033[43m"
|
|
blue = "\033[44m"
|
|
purple = "\033[45m"
|
|
cyan = "\033[46m"
|
|
lightgrey = "\033[47m"
|
|
|
|
class PlainTextFormatter(logging.Formatter):
|
|
def format(self, record):
|
|
log_message = super().format(record)
|
|
log_message = re.sub(r"\033\[[0-9]{1,2}m", "", log_message)
|
|
return log_message
|
|
|
|
# Make it easy to log text:
|
|
def write(input_str, color=colors.fg.lightgrey, logger_name="discord.bot"):
|
|
global LOG_SETUP
|
|
|
|
if not LOG_SETUP:
|
|
logging.getLogger("discord").setLevel(logging.DEBUG)
|
|
logging.getLogger("discord.http").setLevel(logging.INFO)
|
|
|
|
line_format = "[{asctime}] [{threadName}] [{levelname}] {name}: {message}"
|
|
timestamp_format = "%Y-%m-%d %H:%M:%S"
|
|
|
|
file_handler = logging.handlers.RotatingFileHandler(filename="log.txt", encoding="utf-8", maxBytes=32 * 1024 * 1024, backupCount=10)
|
|
file_formatter = PlainTextFormatter(line_format, timestamp_format, style="{")
|
|
file_handler.setFormatter(file_formatter)
|
|
|
|
console_handler = logging.StreamHandler()
|
|
console_formatter = logging.Formatter(colors.fg.darkgrey + line_format, timestamp_format, style="{")
|
|
console_handler.setFormatter(console_formatter)
|
|
|
|
root_logger = logging.getLogger()
|
|
root_logger.addHandler(file_handler)
|
|
root_logger.addHandler(console_handler)
|
|
|
|
LOG_SETUP = True
|
|
|
|
logging.getLogger(logger_name).info(f"{color}{input_str}{colors.reset}")
|
|
|
|
def write_prompt(client=None, msg=None, chl=None, user=None, author=None, roles=None, rxn=None):
|
|
bot_name = client.user.name + "#" + client.user.discriminator
|
|
server_name = msg.channel.guild.name
|
|
category_name = msg.channel.category.name
|
|
channel_name = msg.channel.name
|
|
user_name = user.name
|
|
|
|
discrim = 0
|
|
if user.discriminator is not None:
|
|
discrim = user.discriminator
|
|
|
|
user_name = f"{user_name}#{discrim}"
|
|
message_content = msg.content
|
|
message_text = f"[{bot_name}/{server_name}/{category_name}/{channel_name}/{user_name}] {colors.fg.white}{message_content}"
|
|
|
|
write(message_text, logger_name="discord.bot.prompts")
|
|
|
|
def write_stat(key, value):
|
|
write(f"{key}: {value}", logger_name="discord.bot.stats")
|
|
|
|
def get_stat(key, sum=True):
|
|
value = 0
|
|
with open("stats.log.txt") as file:
|
|
lines = [line.strip() for line in file]
|
|
for line in lines:
|
|
match = re.search(key, line)
|
|
if match is not None:
|
|
value = value + float(match.group(1).strip())
|
|
|
|
return value
|