From 791e75cb2beeca45a6edf52b65f7e299e03b5eaf Mon Sep 17 00:00:00 2001 From: SamlonDev Date: Sat, 14 Jun 2025 18:54:02 +0200 Subject: code-style issues --- cogs/vclogs.py | 130 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 cogs/vclogs.py (limited to 'cogs/vclogs.py') diff --git a/cogs/vclogs.py b/cogs/vclogs.py new file mode 100644 index 0000000..4bc7104 --- /dev/null +++ b/cogs/vclogs.py @@ -0,0 +1,130 @@ +import datetime +import json +import os + +import discord +from discord.ext import commands +from gtts import gTTS + + +class VcLogs(commands.Cog): + def __init__(self, bot): + self.bot = bot + + @staticmethod + async def handle_state_change(member, channel, state_type, is_enabled, current_time, log_channel): + """Helper method to handle voice state changes""" + state_messages = { + 'deaf': { + True: ( + f"[{current_time}] {member.name} ogłuchnął się na {channel.name}", + f"{member.display_name} jest bity przez ojca" + ), + False: ( + f"[{current_time}] {member.name} odgłuchał się na {channel.name}", + f"{member.display_name} uciek od ojca" + ) + }, + 'mute': { + True: ( + f"[{current_time}] {member.name} wyciszył się na {channel.name}", + f"{member.display_name} idzie robić jajecznice" + ), + False: ( + f"[{current_time}] {member.name} odciszył się na {channel.name}", + f"{member.display_name} zrobił jajecznice" + ) + } + } + + message, tts_text = state_messages[state_type][is_enabled] + await log_channel.send(message) + print(message) + return tts_text, channel + + async def play_tts(self, channel, text): + # Generate TTS audio + tts = gTTS(text=text, lang='pl') + tts.save('temp_tts.mp3') + + # Connect to the voice channel if not already connected + voice_client = discord.utils.get(self.bot.voice_clients, guild=channel.guild) + if not voice_client or not voice_client.is_connected(): + voice_client = await channel.connect() + elif voice_client.channel != channel: + await voice_client.move_to(channel) + + # Play the TTS audio + if not voice_client.is_playing(): + if os.path.exists('settings.json'): + with open('settings.json') as f: + data = json.load(f) + volume = data['volume'] + else: + with open('settings.json', 'w') as f: + json.dump({'volume': '5'}, f, indent=4) + + audio_source = discord.FFmpegPCMAudio('temp_tts.mp3', options=f'-filter:a "volume={volume}"') + voice_client.play(audio_source) + while voice_client.is_playing(): + await discord.utils.sleep_until(datetime.datetime.now() + datetime.timedelta(seconds=1)) + os.remove('temp_tts.mp3') + + @commands.slash_command( + name="log_volume" + ) + async def volume(self, ctx: discord.ApplicationContext, volume: int): + try: + if not os.path.exists('settings.json'): + with open('settings.json', 'w') as f: + json.dump({'volume': '5'}, f, indent=4) + with open('settings.json', 'w') as f: + json.dump({"volume": volume}, f, indent=4) + await ctx.send(f"Volume has been set to: {volume}") + except Exception as e: + await ctx.respond(e, ephemeral=True) + print(e) + + @commands.Cog.listener() + async def on_voice_state_update(self, member, before, after): + log_channel = self.bot.get_channel(1213843195457183885) + current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + tts_text = None + tts_channel = None + + # Ignore if the user is a bot + if member.bot: + return + + if before.channel is None and after.channel is not None: + message = f"[{current_time}] {member.name} dołączył na {after.channel.name}" + tts_text = f"{member.display_name} sie zespawnił" + tts_channel = after.channel + await log_channel.send(message) + print(message) + elif before.channel is not None and after.channel is None: + message = f"[{current_time}] {member.name} rozłączył się z {before.channel.name}" + tts_text = f"{member.display_name} jest chujem" + tts_channel = before.channel + await log_channel.send(message) + print(message) + + if before.self_deaf != after.self_deaf: + tts_text, tts_channel = await self.handle_state_change( + member, after.channel, 'deaf', after.self_deaf, current_time, log_channel + ) + if tts_text and tts_channel: + await self.play_tts(tts_channel, tts_text) + return + + if before.self_mute != after.self_mute: + tts_text, tts_channel = await self.handle_state_change( + member, after.channel, 'mute', after.self_mute, current_time, log_channel + ) + + if tts_text and tts_channel: + await self.play_tts(tts_channel, tts_text) + + +def setup(bot): + bot.add_cog(VcLogs(bot)) \ No newline at end of file -- cgit v1.2.3