Skip to content

Instantly share code, notes, and snippets.

@BNTFryingPan
Created January 1, 2019 03:43
Show Gist options
  • Save BNTFryingPan/f78d791978222bf00db0815609f1d278 to your computer and use it in GitHub Desktop.
Save BNTFryingPan/f78d791978222bf00db0815609f1d278 to your computer and use it in GitHub Desktop.
twitch bot for twitch plays Car on a Stick
# Python 3.6+
# Reqired Modules:
import socket
import time
import random
import re
import pynput
# Code:
# Setup
keyboard = pynput.keyboard.Controller()
keys = pynput.keyboard.Key
CHAT_MSG = re.compile(r"^:\w+!\w+@\w+\.tmi\.twitch\.tv PRIVMSG #\w+ :")
s = socket.socket()
unicode = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd)
channel = "<channel>"
nick = "<botname>"
token = "<bot oauth>"
s.connect(('irc.chat.twitch.tv', 6667))
s.send(bytes("PASS " + token.lower() + "\r\n", "UTF-8")) # joins twitch chat
s.send(bytes("NICK " + nick.lower() + "\r\n", "UTF-8"))
s.send(bytes("JOIN #" + channel.lower() +"\r\n", "UTF-8"))
# Functions
def chat(message):# Function for sending a message to the Twitch Chat
s.send(bytes(str(r"PRIVMSG #" + channel + r" :" + message + r"\r\n", "UTF-8")))
def press(key):
keyboard.press(key)
time.sleep(0.1)
keyboard.release(key)
def keyDown(key):
keyboard.press(key)
def keyUp(key):
keyboard.release(key)
def p(text):
print(text)
speed = 2
# Main Loop
while True:
response = s.recv(1027).decode("utf-8")
if response == "PING :tmi.twitch.tv\r\n":
s.send("PONG :tmi.twitch.tv\r\n".encode("utf-8"))
else:
username = re.search(r"\w+", response).group(0)
message = CHAT_MSG.sub("", response)
msg = message.lower().split('\r\n')[0]
p(channel + '> ' + username + ': ' + message)
args = msg.split(' ')
cmd = args[0]
try:
args[1]
except IndexError:
args.append(None)
if msg.startswith('!changetheme'):
if args[1] in ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']:
press(args[1])
elif args[1] == 'randomcolor':
press(str(random.randint(0,9)))
elif args[1] == 'randomroad':
press(str(random.choice(['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'])))
else:
press(keys.space)
elif msg.startswith('!left'):
press(keys.left)
elif msg.startswith('!right'):
press(keys.right)
elif msg.startswith('!faster'):
if speed == 1:
keyUp(keys.down)
speed = 2
elif speed == 2:
keyDown(keys.up)
speed = 3
elif msg.startswith('!slower'):
if speed == 3:
keyUp(keys.up)
speed = 2
elif speed == 2:
keyDown(keys.down)
speed = 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment