diff --git a/setup.py b/setup.py index 4d156ad..3fc0ec0 100755 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ py_modules=['stormbot'], package_data={'stormbot': ['data/*.dic']}, scripts=['scripts/stormbot'], - install_requires=['sleekxmpp', 'dnspython'], + install_requires=['sleekxmpp', 'dnspython', 'gtts'], classifiers=['Environment :: Console', 'Intended Audience :: System Administrators', 'Operating System :: POSIX', diff --git a/stormbot/say.py b/stormbot/say.py index e3ed785..02c7b22 100644 --- a/stormbot/say.py +++ b/stormbot/say.py @@ -1,25 +1,28 @@ """TTS for stormbot""" -import os import subprocess +from gtts import gTTS +from tempfile import NamedTemporaryFile + from .bot import Plugin class Say(Plugin): def __init__(self, args): - self.player = args.ttf_player - self.voice = args.say_voice + self.lang = args.say_lang @classmethod def argparse(cls, parser): - parser.add_argument("--ttf-player", type=str, default="espeak", help="Say TTF player (default: %(default)s)") - parser.add_argument("--say-voice", type=str, default="fr-fr", help="Say voice (default: %(default)s)") + parser.add_argument("--say-lang", type=str, default="fr", help="Say lang (default: %(default)s)") def parser(self, parser): subparser = parser.add_parser('say') subparser.set_defaults(command=self.run) - subparser.add_argument("--voice", type=str, default=self.voice, help="Say voice (default: %(default)s)") + subparser.add_argument("--lang", type=str, default=self.lang, help="Say lang (default: %(default)s)") subparser.add_argument("text", type=str, help="Text to say") def run(self, bot, msg, parser, args): - cmd = [self.player, '-v', self.voice, args.text] - subprocess.Popen(cmd, stdin=None, stdout=None, stderr=None, close_fds=True) + tts = gTTS(text=args.text, lang=args.lang) + with NamedTemporaryFile() as f: + tts.write_to_fp(f) + cmd = ['play', '-t', 'mp3', f.name] + subprocess.check_call(cmd)