Reupload with correct file structure

This commit is contained in:
2024-06-06 22:25:12 -04:00
parent 044ec0a81e
commit 6485396900
5 changed files with 0 additions and 0 deletions
+105
View File
@@ -0,0 +1,105 @@
import os
import asyncio
import websockets
import requests
from colorama import Fore
from dotenv import load_dotenv
load_dotenv()
messages_dict = {}
keyword = 'Name:'
EXPRESS_SERVER_URL = 'http://localhost:5000/api/selected'
async def connect_to_twitch():
uri = "wss://irc-ws.chat.twitch.tv:443"
token = os.getenv("TWITCH_OAUTH_TOKEN")
nickname = os.getenv("TWITCH_BOT_NICKNAME")
channel = os.getenv("TWITCH_CHANNEL").lstrip('#')
if not token or not nickname or not channel:
print(Fore.RED + "Missing one or more environment variables. Please check TWITCH_OAUTH_TOKEN, TWITCH_BOT_NICKNAME, and TWITCH_CHANNEL.")
return
print(f"Token: {token}")
print(f"Nickname: {nickname}")
print(f"Channel: {channel}")
while True:
try:
print(Fore.BLUE + "Attempting to connect to Twitch IRC...")
async with websockets.connect(uri) as websocket:
print(Fore.BLUE + "Connection established. Sending authentication...")
await websocket.send(f"PASS {token}")
print(Fore.BLUE + "Sent PASS")
await websocket.send(f"NICK {nickname}")
print(Fore.BLUE + "Sent NICK")
await websocket.send(f"JOIN #{channel}")
print(Fore.BLUE + f"Sent JOIN for channel #{channel}")
print(Fore.GREEN + "Connected to Twitch IRC and joined the channel.")
print(Fore.BLUE + "Waiting to receive messages...")
while True:
try:
message = await websocket.recv()
if "PRIVMSG" in message:
await handle_message(message)
except websockets.exceptions.ConnectionClosedError as e:
print(Fore.RED + f"Connection closed unexpectedly: {e}")
break
except Exception as e:
print(Fore.RED + f"An error occurred while receiving message: {e}")
break
except Exception as e:
print(Fore.RED + f"An error occurred during connection: {e}")
print(Fore.YELLOW + "Attempting to reconnect in 5 seconds...")
await asyncio.sleep(5)
async def handle_message(message):
try:
parts = message.split(':', 2)
if len(parts) < 3:
print(Fore.RED + "Invalid message format")
return None
username_section = parts[1]
user_message = parts[2].strip()
username = username_section.split('!', 1)[0]
print(Fore.CYAN + f"{username}: {user_message}")
if username == 'procptcasual' and user_message == 'clear':
messages_dict.clear()
print(Fore.YELLOW + "Cleared the messages dictionary.")
elif(username == 'procptcasual' and user_message == 'select'):
await send_to_server(messages_dict)
messages_dict.clear()
elif user_message.startswith(keyword):
modified_message = user_message.replace(keyword, '').strip()
await add_message_to_dict((username, modified_message))
else:
return
except Exception as e:
print(Fore.RED + f"An error occurred while handling message: {e}")
async def add_message_to_dict(user_message_tuple):
try:
if user_message_tuple:
username, user_message = user_message_tuple
messages_dict[username] = user_message
print(Fore.YELLOW + f"Added message to dictionary: {username} -> {user_message}")
except Exception as e:
print(Fore.RED + f"An error occurred while adding message to dictionary: {e}")
async def send_to_server(messages):
try:
response = requests.post(EXPRESS_SERVER_URL, json=messages)
if response.status_code == 200:
print(Fore.GREEN + "Successfully sent data to server.")
else:
print(Fore.RED + f"Failed to send data to server. Status code: {response.status_code}")
except Exception as e:
print(Fore.RED + f"An error occurred while sending data to server: {e}")
if __name__ == "__main__":
asyncio.run(connect_to_twitch())