Implement languages

pull/148/head
bobloy 4 years ago
parent 7bd004c78e
commit 1ddcd98078

@ -1,11 +1,40 @@
import io import io
import logging
from typing import Optional, TYPE_CHECKING
import discord import discord
import pycountry
from discord.ext.commands import BadArgument, Converter
from gtts import gTTS from gtts import gTTS
from gtts.lang import _fallback_deprecated_lang, tts_langs
from redbot.core import Config, commands from redbot.core import Config, commands
from redbot.core.bot import Red from redbot.core.bot import Red
from redbot.core.commands import Cog from redbot.core.commands import Cog
log = logging.getLogger("red.fox_v3.tts")
langs = [lang.iso639_1_code for lang in pycountry.languages if hasattr(lang, "iso639_1_code")]
print(langs)
if TYPE_CHECKING:
ISO639Converter = str
else:
class ISO639Converter(Converter):
async def convert(self, ctx, argument) -> str:
lang = _fallback_deprecated_lang(argument)
try:
langs = tts_langs()
if lang not in langs:
raise BadArgument("Language not supported: %s" % lang)
except RuntimeError as e:
log.debug(str(e), exc_info=True)
log.warning(str(e))
return lang
class TTS(Cog): class TTS(Cog):
""" """
@ -18,7 +47,7 @@ class TTS(Cog):
self.config = Config.get_conf(self, identifier=9811198108111121, force_registration=True) self.config = Config.get_conf(self, identifier=9811198108111121, force_registration=True)
default_global = {} default_global = {}
default_guild = {} default_guild = {"language": "en"}
self.config.register_global(**default_global) self.config.register_global(**default_global)
self.config.register_guild(**default_guild) self.config.register_guild(**default_guild)
@ -27,11 +56,27 @@ class TTS(Cog):
"""Nothing to delete""" """Nothing to delete"""
return return
@commands.mod()
@commands.command()
async def ttslang(self, ctx: commands.Context, lang: ISO639Converter):
"""
Sets the default language for TTS in this guild.
Default is `en` for English
"""
await self.config.guild(ctx.guild).language.set(lang)
await ctx.send(f"Default tts language set to {lang}")
@commands.command(aliases=["t2s", "text2"]) @commands.command(aliases=["t2s", "text2"])
async def tts(self, ctx: commands.Context, *, lang: str, text: str): async def tts(
self, ctx: commands.Context, lang: Optional[ISO639Converter] = None, *, text: str
):
"""
Send Text to speech messages as an mp3
""" """
Send Text to speech messages as an mp3 if lang is None:
""" lang = await self.config.guild(ctx.guild).language()
mp3_fp = io.BytesIO() mp3_fp = io.BytesIO()
tts = gTTS(text, lang=lang) tts = gTTS(text, lang=lang)
tts.write_to_fp(mp3_fp) tts.write_to_fp(mp3_fp)

Loading…
Cancel
Save