import asyncio
import argparse
from urllib.parse import urlparse
from pytmi import Client  # Assurez-vous que c'est le nom correct de votre module et qu'il est correctement installé.

async def send_message_to_twitch_stream(pseudo, token, stream_url, message):
    parsed_url = urlparse(stream_url)
    channel = parsed_url.path.lstrip('/')

    try:
        async with Client() as client:
            try:
                print("Tentative de login")
                await client.login_oauth(token, pseudo)
                print("Tentative de join")
                await client.join(channel)
                print("Tentative d'envoi de message")
                await client.send_message(message)
                print("Message envoyé avec succès.")
                # Attendre un peu avant de se déconnecter pour s'assurer que le message est envoyé
                await asyncio.sleep(2)
                print("Déconnexion...")
            except Exception as e:
                print(f"Erreur lors de l'interaction avec Twitch: {type(e).__name__}, {e}")
    except AttributeError as e:
        if "'Client' object has no attribute 'part'" in str(e):
            print("Message envoyé avec succès. (Erreur de déconnexion ignorée - bug connu de pytmi)")
        else:
            print(f"Erreur AttributeError: {e}")
    except Exception as e:
        print(f"Erreur inattendue: {type(e).__name__}, {e}")

async def main():    
    parser = argparse.ArgumentParser()
    parser.add_argument('-pseudo', type=str, required=True, help='Pseudo name account')
    parser.add_argument('-token', type=str, required=True, help='Token oauth')
    parser.add_argument('-message', type=str, required=True, help='Message to send')
    parser.add_argument('-twitchname', type=str, required=True, help='Twitch channel name')
    args = parser.parse_args()

    stream_url = "https://www.twitch.tv/"+args.twitchname
    await send_message_to_twitch_stream(pseudo=args.pseudo, token=args.token, stream_url=stream_url, message=args.message)


if __name__ == "__main__":
    asyncio.run(main())
