diff --git a/voice_recognition.py b/voice_recognition.py index 8986b1e..5566596 100644 --- a/voice_recognition.py +++ b/voice_recognition.py @@ -3,10 +3,10 @@ import wave import assemblyai as aai import discord -from discord.ext import commands, voice_recv +from discord.ext import commands, voice_recv, tasks from discord.opus import Decoder as OpusDecoder from queue import Queue, Empty - +import time # Replace with your API key aai.settings.api_key = "aa9962f0088a449a9c4ab2361e96cc08" discord.opus._load_default() @@ -99,7 +99,7 @@ class SRBuffer(voice_recv.AudioSink): super().__init__() self.wavewriter = { - "346956223645614080" : WaveWriter("346956223645614080") + "346956223645614080" : [WaveWriter("346956223645614080"), time.time_ns(), False] } def on_user_connect(self, username): @@ -116,7 +116,9 @@ class SRBuffer(voice_recv.AudioSink): return False def write(self, user, data) -> None: - self.wavewriter[str(user.id)].writeframes(data.pcm) + self.wavewriter[str(user.id)][0].writeframes(data.pcm) + self.wavewriter[str(user.id)][1] = time.time_ns() + self.wavewriter[str(user.id)][2] = True def cleanup(self) -> None: try: @@ -130,7 +132,6 @@ class SRBuffer(voice_recv.AudioSink): class Transcriber(commands.Cog): def __init__(self, bot): self.bot = bot - self._last_member = None self.wsink = SRBuffer() self.threads = [] self.comm_queue = Queue() @@ -160,6 +161,14 @@ class Transcriber(commands.Cog): logger.info(self.bot.voice_clients) vc.listen(self.wsink) + @tasks.loop(seconds=5) + async def check_data(self): + for item in self.wsink.wavewriter.values(): + print(item[0]) + print(item[1]) + print(item[2]) + print(time.time_ns()) + @commands.Cog.listener() async def on_voice_state_update(self, user, before, after): if before.channel is None: @@ -167,9 +176,11 @@ class Transcriber(commands.Cog): self.wsink.on_user_connect(user.id) elif after.channel is None: logger.info("User %s disconnected from channel %s", user, before.channel.name) - self.wsink.on_user_disconnect(user.id) - elif after.self_mute or after.mute: - self.wsink.rotate_user(user.id) + operation = { + "type": "user_cleanup", + user : str(user.id) + } + self.comm_queue.put(operation) else: logger.info("User VC status changed %s", user.id) logger.info("Before %s", before)