Created
January 1, 2019 03:43
-
-
Save BNTFryingPan/f78d791978222bf00db0815609f1d278 to your computer and use it in GitHub Desktop.
twitch bot for twitch plays Car on a Stick
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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