init
This commit is contained in:
88
twitch.py
Normal file
88
twitch.py
Normal file
@@ -0,0 +1,88 @@
|
||||
############################################### twitchSockets
|
||||
import re
|
||||
from zoneinfo import *
|
||||
from datetime import datetime
|
||||
import socket
|
||||
# from huy import tw_comments
|
||||
class TwitchChatIRC():
|
||||
__HOST = 'irc.chat.twitch.tv'
|
||||
__NICK = 'justinfan67420'
|
||||
__PASS = 'SCHMOOPIIE'
|
||||
__PORT = 6667
|
||||
all_messages = []
|
||||
|
||||
|
||||
__PATTERN = re.compile(r'@(.+?(?=\s+:)).*PRIVMSG[^:]*:([^\r\n]*)')
|
||||
|
||||
def __init__(self, channel):
|
||||
|
||||
self.__SOCKET = socket.socket()
|
||||
self.__SOCKET.connect((self.__HOST, self.__PORT))
|
||||
print('Connected to twitch socket:',self.__HOST,'on port',self.__PORT)
|
||||
self.__send_raw('CAP REQ :twitch.tv/tags')
|
||||
self.__send_raw('PASS ' + self.__PASS)
|
||||
self.__send_raw('NICK ' + self.__NICK)
|
||||
|
||||
self.__send_raw('JOIN #{}'.format(channel))
|
||||
self.__SOCKET.settimeout(2.0)
|
||||
|
||||
|
||||
def __send_raw(self, string):
|
||||
self.__SOCKET.send((string+'\r\n').encode('utf-8'))
|
||||
|
||||
def __recvall(self,buffer_size):
|
||||
data = b''
|
||||
while True:
|
||||
part =self.__SOCKET.recv(buffer_size)
|
||||
data += part
|
||||
|
||||
if len(part) < buffer_size:
|
||||
break
|
||||
return data.decode('utf-8')
|
||||
|
||||
def close_connection(__SOCKET):
|
||||
__SOCKET.close()
|
||||
print('Connection closed')
|
||||
|
||||
|
||||
def listen(self, timeout=None, message_timeout=1.0, on_message = None, buffer_size = 4096, message_limit = None, output=None):
|
||||
readbuffer = ''
|
||||
print('Starting twitch thread...')
|
||||
try:
|
||||
while True:
|
||||
try:
|
||||
new_info = self.__recvall(buffer_size)
|
||||
readbuffer += new_info
|
||||
|
||||
if('PING :tmi.twitch.tv' in readbuffer):
|
||||
self.__send_raw('PONG :tmi.twitch.tv')
|
||||
|
||||
matches = list(self.__PATTERN.finditer(readbuffer))
|
||||
|
||||
if(matches):
|
||||
if(len(matches) > 1):
|
||||
matches = matches[:-1] # assume last one is incomplete
|
||||
last_index = matches[-1].span()[1]
|
||||
readbuffer = readbuffer[last_index:]
|
||||
for match in matches:
|
||||
data = {}
|
||||
for item in match.group(1).split(';'):
|
||||
keys = item.split('=',1)
|
||||
data[keys[0]]=keys[1]
|
||||
data['message'] = match.group(2)
|
||||
dt = datetime.fromtimestamp(int(data['tmi-sent-ts'])/1000).replace(tzinfo=ZoneInfo('Asia/Yekaterinburg'))
|
||||
my_data = dict({'id': data['id'], 'type': 'tw', 'date': dt, 'sendr': data['display-name'], 'msg': data['message'].encode('utf-8').decode('utf-8','ignore')})
|
||||
# print(data)
|
||||
self.all_messages.append(my_data)
|
||||
except socket.timeout:
|
||||
if(timeout != None):
|
||||
print('timeout!')
|
||||
except KeyboardInterrupt:
|
||||
print('Interrupted by user.')
|
||||
|
||||
# except Exception as e:
|
||||
# print('Unknown Error:',e)
|
||||
# raise e
|
||||
# return messages
|
||||
|
||||
########################################################################################
|
||||
Reference in New Issue
Block a user