Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import socket
- import logging
- import csv
- import re
- import asyncio
- from datetime import datetime
- from emoji import demojize
- logging.basicConfig(level=logging.DEBUG,
- format='%(asctime)s — %(message)s',
- datefmt='%Y-%m-%d_%H:%M:%S',
- handlers=[logging.FileHandler('chat.log', encoding='utf-8')])
- """
- Get token here: https://twitchapps.com/tmi/
- """
- SERVER = 'irc.chat.twitch.tv'
- PORT = 6667
- NICKNAME = 'navillus_r'
- TOKEN = 'oauth:gzjihwto599mkdcsd3je15vzzulvlw'
- CHANNEL = '#twitchtrainsmario'
- class ChatFeedback():
- def __init__(self):
- self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- self.sock.connect((SERVER, PORT))
- self.sock.setblocking(0)
- self.sock.send(f"PASS {TOKEN}\r\n".encode('utf-8'))
- self.sock.send(f"NICK {NICKNAME}\r\n".encode('utf-8'))
- self.sock.send(f"JOIN {CHANNEL}\r\n".encode('utf-8'))
- self.feedback_data = []
- self.loop = asyncio.get_event_loop()
- self.loop.create_task(self.run_chat_loop())
- async def run_chat_loop(self):
- while True:
- task = self.loop.create_task(self.chat_loop())
- try:
- await task
- except asyncio.exceptions.CancelledError:
- pass
- def stop(self):
- self.chat_task.cancel()
- self.loop.stop()
- self.loop.close()
- def get_chat_feedback(self):
- data = self.feedback_data
- self.feedback_data = []
- # Return average feedback over this time period
- if len(data) == 0:
- return 0
- return float(sum(data)) / len(data)
- async def chat_loop(self):
- try:
- with open("chat.csv", "w+") as csvfile:
- writer = csv.writer(csvfile)
- resp = await self.loop.sock_recv(self.sock, 2048)
- resp = resp.decode('utf-8')
- if resp.startswith('PING'):
- self.sock.send("PONG\n".encode('utf-8'))
- elif len(resp) > 0:
- now = datetime.now()
- current_time = now.strftime("%H:%M:%S.%f")
- search = re.search(':(.*)\!.*@.*\.tmi\.twitch\.tv PRIVMSG #(.*) :(.*)', resp)
- if not search:
- return
- username, chan, message = search.groups()
- print(username)
- resp = demojize(resp).lower()
- if "good bot" in resp:
- score = 1
- elif "bad bot" in resp:
- score = -1
- else:
- score = 0
- self.feedback_data.append(score)
- writer.writerow([current_time, username, score])
- csvfile.flush()
- logging.info(demojize(resp))
- except KeyboardInterrupt:
- self.sock.close()
- exit()
- ch = ChatFeedback()
Advertisement
Add Comment
Please, Sign In to add comment