import os import discord from redbot.core import Config, commands from activity_logger import log_activity, activity_log_path, activity_units_path class FitnessCog(commands.Cog): def __init__(self, bot): self.bot = bot # Some hardcoded values, this probably should be changed with redbot config. IDK how to use it or what's in it. default_threads = "1457402451530350727,1328363409648910356" self.threads_id = list(map(int, os.getenv("THREADS_ID", default_threads).split(","))) self.confirm_reactions = os.getenv("CONFIRMATION_REACTIONS", "🐈💨") @commands.Cog.listener() async def on_message(self, message): if message.author.bot: return if message.channel.id not in self.threads_id: return if not message.content.startswith("!"): return # region Fitness commands if message.content.startswith("!getunits"): await self.get_units_file(message) return if message.content.startswith("!getlog"): await self.get_log_file(message) return # Make sure this one is past every other ! commands await self.fitness_activity_log(message) return # endregion Fitness commands # region Fitness commands functions @staticmethod async def get_units_file(message: discord.Message): try: raw = message.content[1:].lower().strip().split(" ", 1) filename = activity_units_path(raw[1]) await message.channel.send(file=discord.File(fp=filename)) except Exception as e: await message.channel.send(str(e)) @staticmethod async def get_log_file(message: discord.Message): try: raw = message.content[1:].lower().strip().split(" ", 1) filename = activity_log_path(raw[1]) await message.channel.send(file=discord.File(fp=filename)) except Exception as e: await message.channel.send(str(e)) async def log_fitness(self, message): try: raw = message.content[1:].lower().strip().split(" ", 2) timestamp = int(message.created_at.timestamp()) username = message.author.name activity = raw[0] value = float(raw[1]) unit = raw[2] if len(raw) > 2 else "m" log_activity(timestamp, username, activity, value, unit) for r in self.confirm_reactions: await message.add_reaction(r) except Exception as e: await message.reply(str(e)) # endregion Fitness commands functions def setup(bot): bot.add_cog(FitnessCog(bot))