import logging import random import discord from botbotbot.shuffle import Shuffler from botbotbot.tts import CambAI logger = logging.getLogger(__name__) class VoiceBot: def __init__( self, bot: discord.Bot, cambai: CambAI | None = None, shuffler: Shuffler | None = None, ) -> None: self.bot = bot self.cambai = cambai self.shf = shuffler def init_events(self) -> None: self.bot.add_listener(self.on_voice_state_update, "on_voice_state_update") async def on_voice_state_update( self, member: discord.Member, before: discord.VoiceState, after: discord.VoiceState, ) -> None: logger.debug("Voice state update") logger.debug(before.channel) logger.debug(after.channel) if after.channel: logger.debug(after.channel.members) if ( self.cambai is not None and before.channel is None and after.channel is not None and self.bot not in after.channel.members and self.bot.user and member.id != self.bot.user.id and random.random() < 5 / 100 ): logger.info("Generating tts") script = random.choice( [ "Salut la jeunesse !", f"Salut {member.display_name}, ça va bien ?", "Allo ? À l'huile !", ] ) source = await discord.FFmpegOpusAudio.from_probe(self.cambai.tts(script)) vo: discord.VoiceClient = await after.channel.connect() await vo.play(source, wait_finish=True) await vo.disconnect() if self.shf and before.channel is None and random.random() < 5 / 100: logger.info(f"Voice shuffle from {member}") await self.shf.try_shuffle(member.guild)