Text-To-Speech Plugin

This is a built-in extension plugin that follows the plugin template system.
This is a plugin that lets the bot speak to the user using a text-to-speech system. It has multiple voices available, and can even download and store voice clips.
Full voice list can be found here: Amazon Polly - Voice List

Usage:

!tts 'voice_name' 'message'/!tts 'message': Plays a message with text to speech with a given voice.
!ttslist: Displays all the available text to speech tracks in private messages.
!ttsvoices: Displays all the available text to speech voices.
!ttsdownload 'clip_name' 'voice_name' 'message': Downloads and saves a text to speech clip with the given voice and message.
!ttsplay 'clip_name': Plays the given text to speech track from storage.
!ttsplayquiet 'clip_name': Plays the given text to speech track from storage but doesn't display any errors if encountered.
!ttsdelete 'clip_name.oga': Deletes a clip from the text to speech storage. Be sure to specify the .oga extension.
Plugin Metadata

    [Plugin Information]
    PluginVersion = 5.0.0
    PluginName = Text To Speech
    PluginDescription = The Text To Speech plugin uses the streamlabs polly tts API to play text to speech.
    PluginLanguage = EN
    PluginCommands: [
                    "tts",
                    "ttsplay",
                    "ttsplayquiet",
                    "ttslist",
                    "ttsdownload",
                    "ttsdelete",
                    "ttsvoices"
                    ]

    [Plugin Settings]
    TextCharLimit = 256
    ; Default voice to use:
    DefaultVoice = Brian
    ; Full voice list can be found here: https://docs.aws.amazon.com/polly/latest/dg/voicelist.html
    AllowedVoiceList = [
                        "Zeina", "Zhiyu", "Naja", "Mads", "Lotte", "Ruben",
                        "Nicole", "Russell", "Amy", "Emma", "Brian", "Aditi", "Raveena",
                        "Ivy", "Joanna", "Kendra", "Kimberly", "Salli", "Joey", "Justin",
                        "Matthew", "Geraint", "Celine", "Mathieu", "Chantal", "Marlene",
                        "Vicki", "Hans", "Dora", "Karl", "Carla", "Bianca", "Giorgio",
                        "Mizuki", "Takumi", "Seoyeon", "Liv", "Ewa", "Maja", "Jacek", "Jan",
                        "Vitoria", "Ricardo", "Ines", "Cristiano", "Carmen", "Tatyana", "Maxim",
                        "Conchita", "Lucia", "Enrique", "Mia", "Penelope", "Miguel", "Astrid", "Filiz",
                        "Gwyneth"
                       ]
    ; List commands that need the core thread to wait for completion.
    ; This may include processes that require multiple commands in succession.
    ; For example: [Youtube Plugin - !yt -> !p] process requires 2 commands in that order.
    ThreadWaitForCommands: []
    UseSingleThread = False

    [Plugin Type]
    ControllablePlugin = True
    AudioPlugin = True
    ImagePlugin = False
    CorePlugin = False
    ExtensionPlugin = True