-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSLDSPlaysTwitch.py
104 lines (79 loc) · 3.5 KB
/
SLDSPlaysTwitch.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import socket
import pyautogui
import threading
import twitchplaysWeb as webapp
server = "irc.twitch.tv"
port = 6667
# identificador de usuario para Twitch de la cuenta SLDS_Bot
password = "oauth:ivitob4is4f3q9g9mkv3fwk5f2jahe"
user = "bot"
owner = "slds_bot"
twitchirc = socket.socket()
twitchirc.connect((server, port));
twitchirc.send(('PASS %s\r\n' %password).encode())
twitchirc.send(('NICK %s\r\n' %user).encode())
twitchirc.send(('JOIN #%s\r\n' %owner).encode())
def sendMessage(message):
temp = "PRIVMSG #" + owner + " :" + message + "\n"
try:
twitchirc.send(temp.encode())
except:
print("No he podido enviar el mensaje")
def enviar_a_socket(msg):
webapp.send(msg)
def getUser(line):
return line.split("!")[0][1:]
def getMessage(line):
return line.split(":")[2]
# La key pulsada tendra efecto en la ventana que tenga el focus del sistema.
def pulsar_boton(boton):
pyautogui.keyDown(boton)
pyautogui.keyUp(boton)
# Inicio en paralelo del webservice que muestra los botones escritos en el chat
thread = threading.Thread(target=webapp.init)
thread.start()
while True:
try:
chatbuffer = twitchirc.recv(4096).decode()
for line in chatbuffer.split("\n"):
# Filtrado de las lineas que envía el servidor. Solamente nos quedamos con los mensajes
# de los usuarios en el chat y los mensajes PING de Twitch
if "PRIVMSG" in line:
user = getUser(line)
message = getMessage(line)
if (message == "up\r"):
pulsar_boton('up')
enviar_a_socket({"button": {"user":user, "button":"up"}})
if (message == "down\r"):
pulsar_boton('down')
enviar_a_socket({"button": {"user":user, "button":"down"}})
if (message == "left\r"):
pulsar_boton('left')
enviar_a_socket({"button": {"user":user, "button":"left"}})
if (message == "right\r"):
pulsar_boton('right')
enviar_a_socket({"button": {"user":user, "button":"right"}})
# En este caso, nuestro emulador tiene asociadas las teclas 's' y 'a' con
# los botones A y B de la consola respectivamente.
if (message == "a\r"):
pulsar_boton('s')
enviar_a_socket({"button": {"user":user, "button":"a"}})
if (message == "b\r"):
pulsar_boton('a')
enviar_a_socket({"button": {"user":user, "button":"b"}})
if (message == "select\r"):
pulsar_boton('n')
enviar_a_socket({"button": {"user":user, "button":"select"}})
if (message == "start\r"):
pulsar_boton('m')
enviar_a_socket({"button": {"user":user, "button":"start"}})
# En caso de necesitar nuevas teclas para otros emuladores distintos,
# simplemente habria que añadir aquí otro if para cada tecla nueva
# El servidor de twitch nos envia un mensaje PING cada 5 minutos para comprobar que la conexión sigue
# establecida y que hay alguien escuchando. Para mantener la conexión tenemos que contestar a estos PINGs
# con un mensaje PONG
if "PING" in line:
respuesta = "PONG tmi.twitch.tv\r\n"
twitchirc.send(respuesta.encode())
except:
continue