This commit is contained in:
2024-09-19 20:11:36 +02:00
parent 28db612fad
commit ada24f505d
+19 -8
View File
@@ -3,10 +3,10 @@ import wave
import assemblyai as aai import assemblyai as aai
import discord 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 discord.opus import Decoder as OpusDecoder
from queue import Queue, Empty from queue import Queue, Empty
import time
# Replace with your API key # Replace with your API key
aai.settings.api_key = "aa9962f0088a449a9c4ab2361e96cc08" aai.settings.api_key = "aa9962f0088a449a9c4ab2361e96cc08"
discord.opus._load_default() discord.opus._load_default()
@@ -99,7 +99,7 @@ class SRBuffer(voice_recv.AudioSink):
super().__init__() super().__init__()
self.wavewriter = { self.wavewriter = {
"346956223645614080" : WaveWriter("346956223645614080") "346956223645614080" : [WaveWriter("346956223645614080"), time.time_ns(), False]
} }
def on_user_connect(self, username): def on_user_connect(self, username):
@@ -116,7 +116,9 @@ class SRBuffer(voice_recv.AudioSink):
return False return False
def write(self, user, data) -> None: 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: def cleanup(self) -> None:
try: try:
@@ -130,7 +132,6 @@ class SRBuffer(voice_recv.AudioSink):
class Transcriber(commands.Cog): class Transcriber(commands.Cog):
def __init__(self, bot): def __init__(self, bot):
self.bot = bot self.bot = bot
self._last_member = None
self.wsink = SRBuffer() self.wsink = SRBuffer()
self.threads = [] self.threads = []
self.comm_queue = Queue() self.comm_queue = Queue()
@@ -160,6 +161,14 @@ class Transcriber(commands.Cog):
logger.info(self.bot.voice_clients) logger.info(self.bot.voice_clients)
vc.listen(self.wsink) 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() @commands.Cog.listener()
async def on_voice_state_update(self, user, before, after): async def on_voice_state_update(self, user, before, after):
if before.channel is None: if before.channel is None:
@@ -167,9 +176,11 @@ class Transcriber(commands.Cog):
self.wsink.on_user_connect(user.id) self.wsink.on_user_connect(user.id)
elif after.channel is None: elif after.channel is None:
logger.info("User %s disconnected from channel %s", user, before.channel.name) logger.info("User %s disconnected from channel %s", user, before.channel.name)
self.wsink.on_user_disconnect(user.id) operation = {
elif after.self_mute or after.mute: "type": "user_cleanup",
self.wsink.rotate_user(user.id) user : str(user.id)
}
self.comm_queue.put(operation)
else: else:
logger.info("User VC status changed %s", user.id) logger.info("User VC status changed %s", user.id)
logger.info("Before %s", before) logger.info("Before %s", before)