aboutsummaryrefslogtreecommitdiffstats
path: root/cogs/vc_logs.py
blob: e4a845400562492d3580a2532dbd28fabc7bd97b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import discord
from discord.ext import commands
import datetime
from gtts import gTTS
import os
import json

class vc_logs(commands.Cog):
    def __init__(self, bot):
        self.bot = bot
    
    async def play_tts(self, channel, text):
        # Generate TTS audio
        tts = gTTS(text=text, lang='pl')
        tts.save('temp_tts.mp3')
        
        # Connect to 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 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:
            if after.self_deaf:
                message = f"[{current_time}] {member.name} ogłuchnął się na {after.channel.name}"
                tts_text = f"{member.display_name} jest bity przez ojca"
            else:
                message = f"[{current_time}] {member.name} odgłuchął się na {after.channel.name}"
                tts_text = f"{member.display_name} uciek od ojca"
            tts_channel = after.channel
            await log_channel.send(message)
            print(message)
            if tts_text and tts_channel:
                await self.play_tts(tts_channel, tts_text)
            return

        if before.self_mute != after.self_mute:
            if after.self_mute:
                message = f"[{current_time}] {member.name} wyciszył się na {after.channel.name}"
                tts_text = f"{member.display_name} idzie robić jajecznice"
            else:
                message = f"[{current_time}] {member.name} odciszył się na {after.channel.name}"
                tts_text = f"{member.display_name} zrobił jajecznice"
            tts_channel = after.channel
            await log_channel.send(message)
            print(message)
        
        if tts_text and tts_channel:
            await self.play_tts(tts_channel, tts_text)


def setup(bot):
    bot.add_cog(vc_logs(bot))